TOJ 1833. The Hardest Problem Ever
简单题,此处gets(s)和cin.getline(s,201)是一样的,puts(s)和cout<<s<<endl是一样的
Code
#include <iostream>
using namespace std;
int main()
{
char s[201];
int i,len;
gets(s);
while(strcmp("ENDOFINPUT", s))
{
if (strcmp("START", s) && strcmp("END", s))
{
len = strlen(s);
for (i = 0; i < len; i++)
{
if (s[i] <= 'Z' && s[i] >= 'A')
{
s[i] -= 5;
if (s[i] < 'A')
s[i] += 26;
}
}
puts(s);
}
gets(s);
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
char s[201];
int i,len;
gets(s);
while(strcmp("ENDOFINPUT", s))
{
if (strcmp("START", s) && strcmp("END", s))
{
len = strlen(s);
for (i = 0; i < len; i++)
{
if (s[i] <= 'Z' && s[i] >= 'A')
{
s[i] -= 5;
if (s[i] < 'A')
s[i] += 26;
}
}
puts(s);
}
gets(s);
}
return 0;
}
Code
#include <iostream>
using namespace std;
int main()
{
char s[500];
int n,m,i,j;
while(cin>>s)
{
if(s[0]=='.')
break;
cin>>n;
m=strlen(s);
for(i=0;i<m;i++)
{
for(j=i;j<m;j++)
cout<<s[j];
for(j=1;j<n;j++)
cout<<s;
for(j=0;j<i;j++)
cout<<s[j];
cout<<endl;
}
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
char s[500];
int n,m,i,j;
while(cin>>s)
{
if(s[0]=='.')
break;
cin>>n;
m=strlen(s);
for(i=0;i<m;i++)
{
for(j=i;j<m;j++)
cout<<s[j];
for(j=1;j<n;j++)
cout<<s;
for(j=0;j<i;j++)
cout<<s[j];
cout<<endl;
}
}
return 0;
}
对于样本比较少的可以用穷举法,简单题
Code
#include <iostream>
using namespace std;
int main()
{
float len;
double res[278];
int i;
res[0]=0;
res[1]=0.5;
for(i=1;i<278;i++)
{
res[i+1]=res[i]+(1/(double)(i+2));
}
while(cin>>len,len!=0)
{
i=1;
while(res[i]<=len)
i++;
cout<<i<<" card(s)"<<endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
float len;
double res[278];
int i;
res[0]=0;
res[1]=0.5;
for(i=1;i<278;i++)
{
res[i+1]=res[i]+(1/(double)(i+2));
}
while(cin>>len,len!=0)
{
i=1;
while(res[i]<=len)
i++;
cout<<i<<" card(s)"<<endl;
}
return 0;
}
简单题
Code
#include <iostream>
using namespace std;
int main()
{
int i,j,k,d,t,twice,num[16],end;
while(cin>>end,end!=-1)
{
d=0;
i=1;num[0]=end;
while(cin>>t,t!=0)
{
num[i++]=t;
}
for(j=0;j<i;j++)
{
twice=num[j]*2;
for(k=0;k<i;k++)
{
if(num[k]==twice)
{d++;break;}
}
}
cout<<d<<endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i,j,k,d,t,twice,num[16],end;
while(cin>>end,end!=-1)
{
d=0;
i=1;num[0]=end;
while(cin>>t,t!=0)
{
num[i++]=t;
}
for(j=0;j<i;j++)
{
twice=num[j]*2;
for(k=0;k<i;k++)
{
if(num[k]==twice)
{d++;break;}
}
}
cout<<d<<endl;
}
return 0;
}
简单排序题
Code
#include<iostream>
using namespace std;
int main()
{
int test,all,frd,i,j,stp[1001],temp,sum,k;
cin>>test;k=1;
while(test--)
{
cin>>all>>frd;
for(i=0;i<frd;i++)
cin>>stp[i];
for(i=0;i<frd-1;i++)
for(j=i+1;j<frd;j++)
if(stp[j]>stp[i])
{temp=stp[j];stp[j]=stp[i];stp[i]=temp;}
i=0;sum=0;
while(sum<all)
{
if(i==frd)
{break;}
sum+=stp[i];
i++;
}
cout<<"Scenario #"<<k++<<":\n";
if(sum<all) cout<<"impossible"<<endl;
else cout<<i<<endl;
cout<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int test,all,frd,i,j,stp[1001],temp,sum,k;
cin>>test;k=1;
while(test--)
{
cin>>all>>frd;
for(i=0;i<frd;i++)
cin>>stp[i];
for(i=0;i<frd-1;i++)
for(j=i+1;j<frd;j++)
if(stp[j]>stp[i])
{temp=stp[j];stp[j]=stp[i];stp[i]=temp;}
i=0;sum=0;
while(sum<all)
{
if(i==frd)
{break;}
sum+=stp[i];
i++;
}
cout<<"Scenario #"<<k++<<":\n";
if(sum<all) cout<<"impossible"<<endl;
else cout<<i<<endl;
cout<<endl;
}
return 0;
}
数组题
Code
# include <iostream>
using namespace std;
#define max 50000
int num[100000];
int findnext(int i,int d)
{
int j,k=0;
for(j=i+1;j<max;j++)
{if(num[j]==0)
k++;
if(k==d)
break;}
return j;
}
int main()
{
int i,j;
for(i=2;i<max;i++)
num[i]=0;
i=2;
while(i<max)
{
j=i;num[i]=1;
while(j<max)
{
j=findnext(j,i);
num[j]=-1;
}
i=findnext(i,1);
}
int n;
while(cin>>n&&n!=0)
{
int l=0;
for(i=2;i<max;i++)
{
if(num[i]==1)
l++;
if(l==n)
break;
}
cout<<i<<endl;
}
return 0;
}
# include <iostream>
using namespace std;
#define max 50000
int num[100000];
int findnext(int i,int d)
{
int j,k=0;
for(j=i+1;j<max;j++)
{if(num[j]==0)
k++;
if(k==d)
break;}
return j;
}
int main()
{
int i,j;
for(i=2;i<max;i++)
num[i]=0;
i=2;
while(i<max)
{
j=i;num[i]=1;
while(j<max)
{
j=findnext(j,i);
num[j]=-1;
}
i=findnext(i,1);
}
int n;
while(cin>>n&&n!=0)
{
int l=0;
for(i=2;i<max;i++)
{
if(num[i]==1)
l++;
if(l==n)
break;
}
cout<<i<<endl;
}
return 0;
}
方法一:我自己的方法,用六个数组保存,然后从里面选择就行
Code
# include<iostream>
using namespace std;
int main()
{
int k,i,j,m,n,p,q,a[101],b[101],c[101],d[101],e[101],f[101];
cin>>k;
while(1)
{
if(k==0)
break;
for(i=0;i<k;i++)
{cin>>a[i];b[i]=a[i];c[i]=a[i];d[i]=a[i];e[i]=a[i];f[i]=a[i];}
for(i=0;i<k;i++)
for(j=i+1;j<k;j++)
{
if(j!=i)
{
for(m=j+1;m<k;m++)
{
if(m!=j&&m!=i)
{
for(n=m+1;n<k;n++)
{
if(n!=i&&n!=j&&n!=m)
{
for(p=n+1;p<k;p++)
{
if(p!=i&&p!=j&&p!=m&&p!=n)
{
for(q=p+1;q<k;q++)
{
if(q!=i&&q!=j&&q!=m&&q!=n&&q!=p)
cout<<a[i]<<' '<<b[j]<<' '<<c[m]<<' '<<d[n]<<' '<<e[p]<<' '<<f[q]<<endl;
}
}
}
}
}
}
}
}
}
cin>>k;
if(k!=0)
cout<<endl;
}
return 0;
}
# include<iostream>
using namespace std;
int main()
{
int k,i,j,m,n,p,q,a[101],b[101],c[101],d[101],e[101],f[101];
cin>>k;
while(1)
{
if(k==0)
break;
for(i=0;i<k;i++)
{cin>>a[i];b[i]=a[i];c[i]=a[i];d[i]=a[i];e[i]=a[i];f[i]=a[i];}
for(i=0;i<k;i++)
for(j=i+1;j<k;j++)
{
if(j!=i)
{
for(m=j+1;m<k;m++)
{
if(m!=j&&m!=i)
{
for(n=m+1;n<k;n++)
{
if(n!=i&&n!=j&&n!=m)
{
for(p=n+1;p<k;p++)
{
if(p!=i&&p!=j&&p!=m&&p!=n)
{
for(q=p+1;q<k;q++)
{
if(q!=i&&q!=j&&q!=m&&q!=n&&q!=p)
cout<<a[i]<<' '<<b[j]<<' '<<c[m]<<' '<<d[n]<<' '<<e[p]<<' '<<f[q]<<endl;
}
}
}
}
}
}
}
}
}
cin>>k;
if(k!=0)
cout<<endl;
}
return 0;
}
方法二:别人的算法,懒得看了,先贴出来
Code
# include<iostream>
# include<algorithm>
using namespace std;
int num[101];
int main()
{
int n;
int f=0;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
if(f==0)
f=1;
else
printf("\n");
int i,j;
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
sort(&num[1],&num[n+1]);
int t[7];
for(i=1;i<=6;i++)
t[i]=num[i];
while(1)
{
for(i=1;i<=6;i++)
{
if(i>1)
printf(" ");
printf("%d",t[i]);
}
printf("\n");
if(t[1]==num[n-6+1])
break;
i=6;j=n;
while(1)
{
if(t[i]!=num[j])
break;
i--,j--;
}
int k;
for(k=1;k<=n;k++)
if(num[k]==t[i])
break;
for(j=i;j<=6;j++)
{
t[j]=num[k+1];
k++;
}
}
}
return 0;
}
# include<iostream>
# include<algorithm>
using namespace std;
int num[101];
int main()
{
int n;
int f=0;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
if(f==0)
f=1;
else
printf("\n");
int i,j;
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
sort(&num[1],&num[n+1]);
int t[7];
for(i=1;i<=6;i++)
t[i]=num[i];
while(1)
{
for(i=1;i<=6;i++)
{
if(i>1)
printf(" ");
printf("%d",t[i]);
}
printf("\n");
if(t[1]==num[n-6+1])
break;
i=6;j=n;
while(1)
{
if(t[i]!=num[j])
break;
i--,j--;
}
int k;
for(k=1;k<=n;k++)
if(num[k]==t[i])
break;
for(j=i;j<=6;j++)
{
t[j]=num[k+1];
k++;
}
}
}
return 0;
}