题目描述
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而
他每次只掠一眼队伍的排尾就知道总人数了。现有一个至少2人且不超过n人的军队,若是每排a人,每排b人,每排c人则都
会余下1人,问这个军队至少有多少人
输入
输入四个正整数对应题目中的a,b,c,n(2<=a,b,c<=28000,n<1000000000)
输出
输出最小答案,如果无法得出科学的答案,则输出"Wrong count!"
样例输入
2 3 5 100000
样例输出
31
错误代码
#include<stdio.h>
int main()
{
int a = 0, b = 0 ,c=0;
long long n = 0;
scanf("%d %d %d %lld", &a, &b,&c,&n);
int max = a;
max = max > b ? max : b;
max = max > c ? max : c;
int flag = 0;
for (int i = max; i <= n; i++)
{
if (i % a == 1 && i % b == 1 && i % c == 1)
{
printf("%d\n", i);
flag = 1;
break;
}
}
if (flag == 0)
{
printf("Wrong count!");
}
return 0;
}
上面会超时
正确代码:思路找这三个数的最小公倍数 然后加1
#include<stdio.h>
long bei(int m, int n) // 计算两个数的最小公倍数
{
int t = 0;
long a = m, b = n;
while (m%n)
{
t = m;
m = n;
n = t % m;
}
return a*b/n;
}
int main()
{
int a = 0, b = 0 ,c=0;
long long n = 0;
scanf("%d %d %d %lld", &a, &b,&c,&n);
long x = bei(a, b);
x = bei(x, c);
if (x <= n&&n >= 2)
{
printf("%lld", x+1);
}
else
{
printf("Wrong count!");
}
return 0;
}