例题4-1 UVA1339
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char a[105];
char b[105];
int num1[26];
int num2[26];
int i,j,len,flag;
int cmp(int s1,int s2)
{
return(s1>s2);
}
int main()
{
while(cin>>a>>b)
{
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
len=int(strlen(a));
flag=1;
for(i=0;i<len;i++)
{
num1[a[i]-'A']++;
num2[b[i]-'A']++;
}
sort(num1,num1+26,cmp);
sort(num2,num2+26,cmp);
for(i=0;i<26;i++)
{
if(num1[i]!=num2[i])
{
flag=0;
break;
}
}
if(flag==1)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}
例题4-2 UVA489
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int num,i,len;
string solution,guess;
int wrong,flag;
int done(string s,int n)
{
string var="";
var.append(n,' ');
if(s==var)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
while((cin>>num)&&(num!=-1))
{
cin>>solution>>guess;
wrong=0;
flag=0;
len=solution.length();
for(i=0;i<int(guess.length());i++)
{
if(solution.find(guess[i])==string::npos)
{
wrong++;
}
else
{
replace(solution.begin(),solution.end(),guess[i],' ');
}
if(wrong==7)
{
flag=1;
break;
}
if(done(solution,len))
{
flag=2;
break;
}
}
cout<<"Round "<<num<<endl;
if(flag==1)
{
cout<<"You lose."<<endl;
}
else if(flag==2)
{
cout<<"You win."<<endl;
}
else if(flag==0)
{
cout<<"You chickened out."<<endl;
}
}
return 0;
}
例题4-3 UVA133
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int a[21];
int n,k,m,i;
int markni,num,timeh;
int markshun,biaoji,output1,output2;
int main()
{
while((cin>>n>>k>>m))
{
if(!n&&!k&&!m)
{
break;
}
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
a[i]=i+1;
}
timeh=0;
markni=0;
markshun=n-1;
while(1)
{
i=0;
while(1)
{
if(a[(markni)%n]!=0)
{
i++;
}
markni++;
if(i==k)
{
output1=a[(markni-1)%n];
biaoji=(markni-1)%n;
markni=markni%n;
break;
}
}
i=0;
while(1)
{
if(a[(markshun+n)%n]!=0)
{
i++;
}
markshun=(markshun-1+n)%n;
if(i==m)
{
output2=a[(markshun+n+1)%n];
a[(markshun+n+1)%n]=0;
markshun=(markshun+n)%n;
break;
}
}
a[biaoji]=0;
num=0;
for(i=0;i<n;i++)
{
if(a[i]==0)
{
num++;
}
}
if(timeh>=1)
{
cout<<",";
}
if(output1==output2)
{
printf("%3d",output1);
}
else
{
printf("%3d%3d",output1,output2);
}
if(num==n)
{
cout<<endl;
break;
}
timeh++;
}
}
return 0;
}
例题4-4 UVA213
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
char a[8][1<<8];
int k,sum,num;
string str;
char c;
string s;
string answer;
void get(int n)
{
s="";
int i=0;
while(1)
{
c=getchar();
if(c!='\n')
{
i++;
s.append(1,c);
}
if(i==n)
{
break;
}
}
sum=0;
for(int i=0;i<n;i++)
{
sum+=((s[i]-'0')<<(n-i-1));
}
}
int main()
{
while(getline(cin,str))
{
memset(a,0,sizeof(a));
answer="";
a[1][0]=str[0];
k=1;
for(int i=2;i<=7;i++)
for(int j=0;j<(1<<i)-1;j++)
{
if(k==int(str.length())){break;}
a[i][j]=str[k++];
}
while(1)
{
get(3);
if(s=="000"){break;}
num=sum;
while(1)
{
get(num);
if(sum==(1<<num)-1){break;}
answer.append(1,a[num][sum]);
}
}
cout<<answer<<endl;
getchar();//吃掉000后面的回车符
}
return 0;
}