博客摘录「 [PTA]7-101 人民币兑换 (15分)」2024年4月6日

这篇文章讲述了如何用C语言编写程序,通过暴力枚举的方式解决1元5角硬币兑换问题,找出所有可能的n种兑换方案。

1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。输入格式:输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。输出格式:显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。注意:如果全部方案不到n种,就顺序输出全部可能的方案。

输入样例:

5

输出样例:

1 46 53

2 42 56

3 38 59

4 34 62

5 30 65

我的思路比较简单粗暴,就是所谓的暴力枚举。

先说一下我的思路:我提前算出总共会有几种情况,答案是12种

#include"stdio.h"
int main()
{
	int x,y,z,k=0;
	for(int x=1;x<=150;x++)
	{
		for(int y=1;y<=150;y++)
		{
			for(int z=1;z<=150;z++)
			{
				if(x+y+z==100&&5*x+2*y+z==150)
				{
					printf("%d %d %d\n",x,y,z);
					k++;
				}	
			}
		}
	}
	printf("%d",k);
	return 0;
}
//k就是12;你们也可试试

那么好,当我们知道总共也就12种可能,那么如果n>12,就让n==12,即可。

上代码^o^

#include"stdio.h"
int x,y,z,n,k=0,flag=0;
int main()
{
    scanf("%d",&n);
    if(n>12)
        n=12;
    for(x=1;x<=150;x++)
    {
        for(y=1;y<=150;y++)
        {
            for(z=1;z<=150;z++)
            {
                if(x+y+z==100&&5*x+2*y+z==150)
                {
                    printf("%d %d %d\n",x,y,z);
                    k++;
                    if(k==n)
                    {
                        flag=1;
                        break;
                    }
                }
            }
            if(flag==1)
                break;
        }
        if(flag==1)
            break;
    }
    return 0;
}

这个题易错的点在3重for循环,在满足条件时你需要跳出3次for循环,ok没了^o^,是不是简单粗暴啊

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值