您的位置:首页 > 其它

51nod 1079 中国剩余定理

2017-03-29 22:14 375 查看
原理不太懂,先攒着,这题我暴力解的

例7:一个班学生分组做游戏,如果每组三人就多两人,每组五人就多三人,每组七人就多四人,问这个班有多少学生? 
题目可以看成,除3余2,除5余3,除7余4。没有同余的情况,用的方法是“逐步约束法”,就是从“除7余4的数”中找出符合“除5余3的数”,就是再7上一直加7,直到所得的数除5余3。得出数为18,下面只要在18上一直加7和5得最小公倍数35,直到满足“除3余2” 
4+7=11 
11+7=18 
18+35=53

//@auther zhou
//@Number 201408070203
//@start time:
//@finish time:
/*@此处注意:

*/
/* 测试数据

*/
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
struct A{
int p,m;
};
bool cmp(A a,A b){
if(a.p>b.p) return 1;
return 0;
}
vector<A> x;

int main(){
int num;
cin>>num;
A temp;
for(int i=0;i<num;i++){
cin>>temp.p>>temp.m;
x.push_back(temp);
}
sort(x.begin(),x.end(),cmp);
//	for(int i=0;i<num;i++){
//		cout<<x[i].p<<" "<<x[i].m<<endl;
//	}
int t;
int okay=0;
for(int j=0; ;j++){
t=j*x[0].p+x[0].m;
okay=0;
for(int i=1;i<num;i++){
if(t%x[i].p==x[i].m)
okay++;
}
if(okay==num-1){
cout<<t;
return 0;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: