砝码程序验证---转自Yu.C的小站

来源:互联网 发布:asp档案管理系统源码 编辑:程序博客网 时间:2024/04/30 19:17
/*
* 英文名:Alex.Yu 
* 中文名:放下
* QQ 名:Yu.C
* QQ 号:289257489 346596765 448534065
* 网 站:
http://bbs.doloop.cn


* 有4个砝码,每个重量都是整克,总重量是40克,天平可以称出1~40克的物体,问这4个砝码各是多少克?

* 分析程序:
* 先假设4个砝码的重量分别是a,b,c,d;那么它们重量范围为1~40克,这样就调用循环语句,设能够称的克数为r,r必然是从1~40循环的;
* a和b有可能分别放在天平左边或右边(如a是克,c是3克,a和一个重量r为2克的东西放在左边,c放在右边),这样称出来的结果就是r = c - a,
* 所以我们再设置4个变量i,j,k,l,设置他们的3种可能左、中、右,也就是-1,0,1;再设置循环语句i从-1循环到1,建立验证函数Check;

* 要点说明
* 使用到了for和goto
* for循环有3个关键部件
* (1)循环条件--当求值为true时,循环体重新执行;
* (2)循环初始化--初始化循环时,参与循环条件的变量被初始化为适当值。此过程只在循环开始前发生一次;
* (3)循环更新--更新循环的条件变量。在每次循环时都重复进行更新;

* goto 语句将程序控制直接传递给标记语句
* (1)goto 的一个通常用法是将控制传递给特定的 switch-case 标签或 switch 语句中的默认标签。
* (2)goto 语句还用于跳出深嵌套循环。
*/


using System;
using System.Collections.Generic;
using System.Text;

namespace Yu.C.FaMa.App
{
class FaMa
{
static void Main(string[] args)
{
int a, b, c, d;
for(a = 1;a < 40;a++)
for(b = 1;b < 40;b++)
for(c = 1;c < 40;c++)
for (d = 1; d < 40; d++
{
if (a + b + c + d == 40)
{
if(Check(a,b,c,d))
{
Console.WriteLine(
"{0} {1} {2} {3}",a,b,c,d);
}

}

}

Console.WriteLine(
"结束");
Console.ReadLine();
}


static bool Check(int a, int b, int c, int d)
{
int i, j, k, l;
= j = k = l = 0;
for (int r = 1; r <= 40; r++)
{
for(i = -1;i <= 1;i++)
for(j = -1;j <= 1;j++)
for(k = -1;k <= 1;k++)
for (l = -1; l <= 1; l++
{
//如果可以称r重量,则直接跳出去称r+1的重量
if (a * i + b * j + c * k + d * l == r)
goto NextLoop; //goto到NextLoop标记
}

//如果不能称r重量,则说明失败,返回假
return false;
NextLoop: 
//goto标记语句
continue;
}

return true;
}

}

}

 
原创粉丝点击