人名币兑换将一块5角转换为分的数目,详情见帖子最下方

有一个测试不正确
#include
int main(void)
{
    int n, fen5, fen2, fen1 = 0, i = 0;
    scanf("%d", &n);
    while (i <= n)
    {
        for (fen5 = 1; fen5 * 5 < 150; fen5++)
        {
            for (fen2 = 1; 150 - fen5 * 5 - fen2 * 2 > 0; fen2++)
            {

               for(fen1=1;fen1<98;fen1++)
                {
                    if (fen5*5+fen2*2+fen1==150&&fen5 + fen2 + fen1 == 100)
                    {
                        printf("%d %d %d\n", fen5, fen2, fen1);
                        i++;
                        if(fen5==29&&fen2==2&&fen1==2)
                            goto loop;
                        if (i < n)
                            break;
                        if(i==n)
                            goto loop;
                    }
                }

            }

        }

    }
loop:
    return 0;
}

img

的解答思路和尝试过的方法 :就嵌套循环啊,找不到问题在哪

1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,会有很多种兑换方案。请编写程序给出各种兑换方案。

输入格式:
输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照5分硬币从少到多排列的。

输出格式:
显示前n种方案中5分、2分、1分硬币各多少枚。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。

注意:如果全部方案不到n种,就顺序输出全部可能的方案。

for (fen2 = 1; 150 - fen5 * 5 - fen2 * 2 > 0; fen2++)
把这句话改成
for (fen2 = 1; fen2 < 50; fen2++) 试试
下面有 fen55+fen22+fen1==150&&fen5 + fen2 + fen1 == 100 这个控制了,感觉保持一致会不太容易错

会不会是考虑n=0的情况,不知道它会不会把0也算作正整数

if(i<n)放在while循环的第一层