下面是几道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#