如何用1角2角和5角的钱凑出10元以内的金额?
#include <stdio.h>
int main()
{
int x;
int one, two, five;
scanf("%d", &x);
for(one=1; one<x*10; one++){
for(two=1; two<x*10/2; two++){
for(five=1; five<x*10/5; five++){
if(one+two*2+five*5==x*10){
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", one, two, five, x);
}
}
}
}
return 0;
}
用了三个循环,很容易理解
输入的数乘于10就是多少角 然后看需要多少个几角的
如何让他有一个结果就输出 这时候加break是没用的 这个break只让他离开了他所在的最内层循环
让他跳出了第三层循环到了第二层循环
break和continue都只能对他所在的那一层循环去做 不能一下跳出所有的循环
#include <stdio.h>
int main()
{
int x;
int exit=0;
int one, two, five;
scanf("%d", &x);
for(one=1; one<x*10; one++){
for(two=1; two<x*10/2; two++){
for(five=1; five<x*10/5; five++){
if(one+two*2+five*5==x*10){
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", one, two, five, x);
exit=1;
break;
}
}
if(exit==1) break;
}
if(exit==1) break;
}
return 0;
}
不能直接写break 应为这样在不符合条件的时候也会跳出去 加上变量exit之后 在确定有最终结果后exit就会等于1 剩余循环的if语句满足条件才可以跳出
这种运用break的方法叫做 接力break
还有另外一种方案 goto 更简单 只需在需要离开的地方加上goto语句就行了
goto 写法
#include <stdio.h>
................
...............
...............
goto out;
............
.........
........
out:
return 0;
..................
#include <stdio.h>
int main()
{
int x;
int one, two, five;
scanf("%d", &x);
for(one=1; one<x*10; one++){
for(two=1; two<x*10/2; two++){
for(five=1; five<x*10/5; five++){
if(one+two*2+five*5==x*10){
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", one, two, five, x);
goto out;
}
}
}
}
out:
return 0;
}
非常方便 省着加变量
goto out; 他会跳到有out的地方 注意第二个out后面必须有冒号
goto 非常适用于从多重循环跳到循环外面去 其它地方最好不要使用!!!