回坑
凑硬币
题目要求
让用户输入一个金额,如何用1角、2角和5角的硬币凑出输入的金额呢?
解题思路
使用嵌套循环,输出每一个符合要求的值,程序不考虑输入验证,不考虑输入值小于0的情况。
代码实现
#include <stdio.h>
int main()
{
//初始化变量
int x;
int one, two, five;
//提示并获取输入
printf("请输入金额(元):");
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;
}
拓展
题目要求
如果只让程序输入第一个符合要求的值,该如何实现?
解题思路
- 通过break语句,当有一条符合要求的语句被输出后就挨个跳出循环。
- 通过goto语句,当有一条符合要求的语句被输出后就跳出整个嵌套。
代码实现
使用break语句
#include <stdio.h>
int main()
{
//初始化变量
int x;
int one, two, five;
int exit = 0;
//提示并获取输入
printf("请输入金额(元):");
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;
}
使用goto语句
#include <stdio.h>
int main()
{
//初始化变量
int x;
int one, two, five;
//提示并获取输入
printf("请输入金额(元):");
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;
}