某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

问题遇到的现象和发生背景

某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

问题相关代码,请勿粘贴截图

#include <stdio.h>
int main()
{
int a, b, c, d, times;
a = 1;
b = 1;
c = 1;
d = 1;
times = 0;
while (a <=40)
{
while (b <=40)
{
while (c <=40)
{
while (d <= 40)
{
if((a + b + c + d == 40) && (a + 2b + 5c + 10*d == 100))
{
times++;
}
d++;
}
c++;
}
b++;
}
a++;
}
printf("%d", times);

}

运行结果及报错内容

0

我的解答思路和尝试过的方法

不知道哪里错了,求解答

我想要达到的结果
#include<stdio.h>

int main()
{
    int a,b,c,d,times=0;
    for(a=1;a<100;a++)
        for(b=1;b<100/2;b++)
            for(c=1;c<100/5;c++)
                for(d=1;d<100/10;d++)
                    if (a+b+c+d==40 && a+2*b+5*c+10*d == 100)
                        times++;
    printf("%d", times);
    
    return 0;
}

a + 2b + 5c + 10*d == 100