韩信点兵问题

问题描述:求最小整数n,使得n%3=a,n%5=b,n%7=c,并且使得10<=n<=100,如果不在这个区间,输出No,否则输出该数。

问题解析:70是5和7的公倍数,并且70%3=1,所以如果n%3=a,则先假设70*a是n的一部分;这种情况下加上或减去5或7的某倍后对该描述没有影响

     同理,21是3和7的公倍数,21%5=1,所以如果n%5=b,也假设21*b是n的一部分;这种情况下加上或减去3或7的某倍后对该描述没有影响

     同理,15是3和5的公倍数,15%7=1,所以如果n%5=c,也假设15*c是n的一部分;这种情况下加上或减去3或5的某倍后对该描述没有影响

     综上,暂且假设n=70*a+21*b+15*c;

     又3、5、7的公倍数为105,n加上或者减去105 的某倍对该描述没影响,所以n=70*a+21*b+15*c-k*105;

例子代码:

 1 //韩信点兵的最小值
 2 #include<stdio.h>
 3 int a,b,c,n;
 4 int main()
 5 {
 6     scanf("%d%d%d",&a,&b,&c);
 7     n=70*a+21*b+15*c;
 8     while(n-105>0) n=n-105;
 9     if(10<=n&&n<=100) printf("%d
",n);
10     else printf("No
");
11     return 0;
12 }

运行结果:

 

     

原文地址:https://www.cnblogs.com/bboykaku/p/12601748.html