您的位置:首页 > 其它

韩信点兵

2014-03-09 20:03 204 查看
描述
相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。

输入输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5
输出输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89
样例输入
2 1 6


样例输出
41


// 求 a=n%3 和 b=n%5 的最小公共数,在求 c=n%3*5 与 d=n%7 的最小公共数 k, 即k为所求的数


//标程:


#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> v;
int f(int a,int b)
{
int i,x[50],y[50];
for(i=0;i<=34;i++)
{
v.push_back(a+3*i);
v.push_back(b+5*i);
}
sort(v.begin(),v.end());
int temp=v[0];
for(i=1;;i++)
if(temp!=v[i]) temp=v[i];
else break;
return temp;
}
int f1(int a,int b)
{
int i,x[50],y[50];
for(i=0;i<=34;i++)
{
v.push_back(a+15*i);
v.push_back(b+7*i);
}
sort(v.begin(),v.end());
int temp=v[0];
for(i=1;;i++)
if(temp!=v[i]) temp=v[i];
else break;
return temp;
}
int main()
{
//freopen("a.txt","r",stdin);
int a,b,c;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
v.clear();
int k=f(a,b);
v.clear();
int y=f1(k,c);
printf("%d\n",y);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: