当前位置:编程学习 > C#/ASP.NET >>

下面是几道c#的算法,请各位解决,分不够再加!

    1,使用一根长度为L厘米的铁丝,制作一个面积为S的矩形框,要求计算出满足这种条件的矩形的高h和宽w。 

    2, 我国古代数学家在《算经》中出了一道题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡、小鸡各多少?要求编写成控制台应用程序。 

   3,一辆卡车违反交通规则,撞死行人,司机畏罪驾车逃跑。当时有三个人目击这一车祸的发生,但都没有看清卡车的牌照号码,只记住牌照号码的部分特征,甲记住牌照号码的前两位数字是相同的,乙记住牌照号码的后两位数字是相同的,丙是一位数学家,他说“车牌号码肯定是四位数,而且恰好是一个整数的平方。”,并且丙已推导出符合该条件的号码只可能有一个。根据这些信息来判定车牌号并捉拿肇事司机。要求编写控制台应用程序。 

    
--------------------编程问答-------------------- up --------------------编程问答-------------------- 1:
static void Main(string[] args)
        {
            int lengh = 0; //长度
            int s = 0; //面积
            Console.WriteLine("输入长度");
            lengh = int.Parse(Console.ReadLine());

            Console.WriteLine("输入面积");
            s = int.Parse(Console.ReadLine());
            int h = 0; //长
            int w = 0; //宽
            for (int i = 1; i < lengh; i++)
            {
                w = i;
                for (int j = 1; j < lengh; j++)
                {
                    h = j;
                    if (lengh == 2 * (h + w) && s == h * w)
                    {
                        Console.WriteLine("高是:" + h.ToString());
                        Console.WriteLine("宽是:" + w.ToString());

                    }
                }
            }

        } --------------------编程问答-------------------- 3.
 static void Main(string[] args)
        {
            int n;
            for (int i = 31; i < 100; i++)
            {
                n = i * i;
                if (n / 1000 == n % 1000 / 100 && n / 10 % 10 == n % 10)
                {
                    Console.WriteLine(n.ToString());
                }
            }
            Console.Read();
        }

答案:7744
--------------------编程问答-------------------- 2
 int a = 0; // 公鸡数量
            int b = 0; // 母鸡数量
            int c = 0; //小鸡数量

            for (a = 0; a < 100; a ++ )
            {
                for (b = 0; b < 100; b++)
                {
                    for (c = 0; c < 100; c++)
                    {
                        if ((a + b + c == 100) && (5 * a + 3 * b + c / 3 == 100) && (c%3 == 0))
                        {
                            Console.WriteLine("公鸡数量" + a + "母鸡数量" + b + " 小鸡数量" + c);
                        }
                    }
                }
            } --------------------编程问答--------------------  static void Main(string[] args)
        {
            for (int i = 0; i <= 20; i++)//公鸡
                for (int j = 0; j <= 33; j++)//母鸡
                    for (int x = 0; x <= 300; x++)//小鸡
                    {
                        if ((5 * i + j * 3 + x/3) == 100 &&( i + j + x) == 100&&(x%3==0))
                        {
                            Console.Write("i=" + i.ToString());
                            Console.Write(" ");
                            Console.Write("j=" + j.ToString());
                            Console.Write(" ");
                            Console.Write("x=" + x.ToString());
                            Console.WriteLine();
                        }
                    }

            Console.Read();
        } --------------------编程问答-------------------- 3
static void Main(string[] args)
        {

            int x; // 前2位
            int y; // 后2位
            
            for (x = 0; x < 10; x++)
            {
                for (y = 0; y < 10; y++)
                {
                    for (int count = 0; count < 99; count++)
                    {
                        int num = int.Parse((x.ToString() + x.ToString() + y.ToString() + y.ToString()));
                        if (num == count * count)
                        {
                            Console.WriteLine(num.ToString());
                        }
                    }
                }
            }
        } --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 第一个问题解答,写了个小函数
        private void aaa(double L,double S)
        {
            double h = L / 4;   //长 
            double w = L / 4;   //宽 

            double S1 = (L / 4) * (L / 4);//验证面积
             if(S1 < S)
            {
                 MessageBox .Show ("无解");  
            }
            else
            {
                while (Math.Abs(S1 - S) > 0.00000001)
                {
                    if (S1 > S)
                    {
                        w = w / 2;
                        h = h + w;
                        S1 = w * h;
                    }
                    else
                    {
                        w = w + w / 2;
                        h = L / 2 - w;
                        S1 = w * h;
                    }
                }
                MessageBox.Show("长度为:"+h.ToString());
                MessageBox.Show("宽度为:"+w.ToString());
            }

        } --------------------编程问答-------------------- 第二个问题解答,还是个小函数,改动了下前面两位老兄的算法,小提高了点效率
 private void bbb()
        {
            int a = 0;   //   公鸡数量 
            int b = 0;   //   母鸡数量 
            int c = 0;   //小鸡数量 

            for (a = 0; a < 100; a++)
            {
                for (b = 0; b < 100; b++)
                {
                    c = 100 - a - b;
                    if ((5 * a + 3 * b + c / 3 == 100) && (c % 3 == 0))
                    {
                        MessageBox.Show("公鸡数量:"+ a.ToString());
                        MessageBox.Show("母鸡数量:" + b.ToString());
                        MessageBox.Show("小鸡数量:" + c.ToString());
                    }
                }
            }
        } --------------------编程问答-------------------- 只要学过初中数学, 就应该会做这种题, 

说白了了就是二元二次方程
--------------------编程问答-------------------- 第三个问题 3楼为最优解 不过可能有人看不明白 解释下吧 借花献佛了
根据题意,最大牌号为9999,因为是一个4位数字的牌号,所以最小为1100.
而牌号又为一个整数的平方,所以这个整数介于31-100之间,这也是楼主为什么循环31-100的原因
楼主定义的整数n其实就是代表了车牌号了,i就是表示的上边说的那个整数
n / 1000 == n % 1000 / 100的意思就是前面两位数字是一样的,解释如下
因为n为整数,所以n / 1000得到的就是千位上的数字,假设牌号为9988 则 9988/1000 = 9
n % 1000 / 100  得到的就是百位上的数字 
n / 10 % 10 得到的是十位上的数字
n % 10 得到的是个位上的数字
 static   void   Main(string[]   args) 

           int n;
            for (int i = 31; i < 100; i++)
            {
                n = i * i;
                if (n / 1000 == n % 1000 / 100 && n / 10 % 10 == n % 10)
                {
                    Console.WriteLine(n.ToString());
                }
            }
            Console.Read(); 
}

答案:7744  --------------------编程问答-------------------- 回10楼 貌似只有第二题是二元二次方程 真要想写出最优的算法也要花点功夫的 --------------------编程问答-------------------- 第三题3楼答的确实经典 --------------------编程问答-------------------- 第二题4楼和9楼还可优化,100钱最多买鸡翁20只,最多买鸡母33只,因此循环次数可减少,循环少的放在里面,效率可提高。 --------------------编程问答-------------------- 对 楼上的正解 --------------------编程问答-------------------- 整理一下答案吧,取长补短
第一个问题解答
        private void aaa(double L,double S)
        {
            double h = L / 4;   //长 
            double w = L / 4;   //宽 

            double S1 = (L / 4) * (L / 4);//验证面积
             if(S1 < S)
            {
                 MessageBox .Show ("无解");  
            }
            else
            {
                while (Math.Abs(S1 - S) > 0.00000001)
                {
                    if (S1 > S)
                    {
                        w = w / 2;
                        h = h + w;
                        S1 = w * h;
                    }
                    else
                    {
                        w = w + w / 2;
                        h = L / 2 - w;
                        S1 = w * h;
                    }
                }
                MessageBox.Show(h.ToString());
                MessageBox.Show(w.ToString());
            }

        }

第二题解答 改为下面结构 更容易理解
 private void ccc()
        {
            string n;
            for (int i = 31; i < 100; i++)
            {
                n = Convert.ToInt32(i * i).ToString();
                if ( n[0] == n[1] && n[2] == n[3])
                {
                    MessageBox.Show(n);
                    return;
                }
            }
        }
第三题解答 经过14楼提醒 改为下面方式
private void bbb()
        {
           int a = 0;   //   公鸡数量 
            int b = 0;   //   母鸡数量 
            int c = 0;   //小鸡数量 

            for (b = 0; b < 33; b++)
            {
                for (a = 0; a < 20; a++)
                {
                    c = 100 - a - b;
                    if((5 * a + 3 * b + c / 3 == 100) && (c % 3 == 0))
                    {
                        MessageBox.Show("公鸡数量:"+ a.ToString());
                        MessageBox.Show("母鸡数量:" + b.ToString());
                        MessageBox.Show("小鸡数量:" + c.ToString());
                    }
                }
            }
        } --------------------编程问答-------------------- 恩!谢谢各位了!这个是老师给我们的题目,我不知道做这些东西是干什么的啊?希望各位指点小弟! --------------------编程问答-------------------- 练习循环语句
算法优化
提高分析和解决问题的能力~~
反正老师不会害你的
最好自己总结下写自己的算法
把上面的答案都优化下吧 --------------------编程问答-------------------- 揪正

这是计算题!
不是什么算法题!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,