#include<iostream> using namespace std; int main() { int a,N; cin>>N; for(int a=2;a<=N;a++) { for(int b=1;b<=N;b++) { for(int c=b;c<=N;c++) { for(int d=c;d<=N;d++) { if(a*a*a==b*b*b+c*c*c+d*d*d) printf("Cube=%d,Triple=(%d,%d,%d)\n",a,b,c,d); } } } } }
/*解法一*/ #include<iostream> using namespace std; int main() { int p,e,i,d; cin>>p>>e>>i>>d; for(int k=d;k<=21252;k++) { if((k-p)%23==0&&(k-e)%28==0&&(k-i)%33==0) { cout<<k-d; } } return 0; }
如何试的更快?
#include<iostream> using namespace std; #define N 21252 int main() { int p,e,i,d,caseNo=0;//体力,情商,智商,指定日子 while(cin>>p>>e>>i>>d&&p!=-1) { ++caseNo; int k; for(k=d+1;(k-p)%23;k++);//找到第一个体力高峰 for(;(k-e)%28;k+=23);//找到第一个体力和情商高峰同一天 for(;(k-i)%33;k+=23*28);//找到第一个体力和情商和智商高峰同一天 cout<<k-d; } }
POJ1013: 有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。
输入
第一行是测试数据组数。
每组数据有三行,每行表示一次称量的结果。硬币标号为A-L。每次称量的结果用三个以空格隔开的字符串表示:
天平左边放置的硬币 天平右边放置的硬币 平衡状态。其中平衡状态用“up”, “down”, 或 “even”表示, 分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。
输出
输出哪一个标号的硬币是假币,并说明它比真币轻还是重。
输入样例
1
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even
输出样例
K is the counterfeit coin and it is light
解题思路:
枚举,对每一枚硬币先假设他是轻的,看是否符合称量结果。
若符合,问题即解决。若不符合,就假设他重的,看看是否符合称量结果。
把所有硬币都试一遍,一定能找到特殊硬币。
#include<iostream>
using namespace std;
char Left[3][7];//左边硬币
char Right[3][7];//右边硬币
char result[3][7];//结果
bool IsFake(char c,bool light)//light为真表示假设假币为轻,否则假设假币为重
{
for(int i=0;i<3;i++) {//分析三次测量结果
char*pLeft,*pRight;//指向天平两边字符串
if(light) {
pLeft=Left[i];
pRight=Right[i];
}
else {
pLeft=Right[i];
pRight=Left[i];
}
switch(result[i][0]) {
case 'u':
if(strchr(pRight,c)==NULL)
return false;
break;
case 'e':
if(strchr(pLeft,c)||strchr(pRight,c))
return false;
break;
case 'd':
if(strchr((pLeft,c)==NULL)
return false;
break;
}
}
return true;
}
int main()
{
int t;//测试数据的组数
cin>>t;
while(t--) {
for(int i=0;i<3;++i)
cin>>Left[i]>>Right[i]>>result[i];//输入三组数据,每组数据相当于三个字符串
for(char c='A';c<='L';c++) {
if(IsFake(c,ture)) {//假设是轻的
cout<<c<<"is the counterfeif coin and it is light.\n";//输出c是轻的
break;//跳出循环
}
else if(IsFake(c,false)) {
cout<<c<<"is the counterfeif coin and it is heavy.\n";
break;
}
}
}
return 0;
}