//此题坑人之处在于,明文密文必须“互相”对应,既不重复,也不遗漏。
//从rq的测试数据来看,如果没有考虑这一点,就有一个点通不过。
#include <stdio.h>
#include <string.h>
int main()
{
char f[100],s[100];
scanf("%s",f);
scanf("%s",s);
char dy[26]; //保存对应表
int i;
for(i=0;i<26;i++) dy[i]=0;
int sta=1; //保存退出状态
for(i=0;i<strlen(f);i++)
{
if(dy[f[i]-'A']==0)
{
dy[f[i]-'A']=s[i];
}
else
{
if(dy[f[i]-'A']!=s[i]) {sta=3;break;}
}
}
int stat[26]={0};
for(i=0;i<strlen(f);i++) stat[dy[i]-'A']++;
for(i=0;i<26;i++) if(stat[i]==0) sta=3;
for(i=0;i<26;i++) if(dy[i]==0) sta=2;
char c[100];
scanf("%s",c);
if(sta!=1)
{
printf("Failed");
}
else
{
for(i=0;i<strlen(c);i++) printf("%c",dy[c[i]-'A']);
}
return 0;
}
RQNOJ 479 [NOIP2001]一元三次方程求解
//扫一遍好了。规模不大。如果很大就要换种方法了。
#include <stdio.h>
float a,b,c,d;
float f(float x)
{
return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
float x;
int sum=0;
scanf("%f%f%f%f",&a,&b,&c,&d);
x=-100;
while(sum!=3)
{
if(f(x)*f(x+0.01)<=0)
{
printf("%0.2f ",x+0.01);
sum++;
}
x+=0.01;
}
return 0;
}
RQNOJ 292 Cantor表
//做着做着发现分子分母反了。所以输出时反一下。
#include <stdio.h>
int main()
{
int n;
int c=1;
int zi=1,mu=1;
int i=1;
int pos;
scanf("%d",&n);
for(c=1;c<=n;c++)
if((c+1)*c/2>=n&&c*(c-1)/2<n) break;
if(c%2==1)
{
pos=(c-1)*c/2;
zi=n-pos;
mu=c+1-zi;
}
else
{
pos=(c-1)*c/2;
zi=n-pos+c-1;
mu=c+1-zi;
}
printf("%d/%d",mu,zi);
return 0;
}
RQNOJ 289 验证数独
//小心一点就好了。悲剧最近经常在小地方出错。做题三思!
#include <stdio.h>
int map[10][10];
int tjx(int y)
{
int stat[10]={0};
int i;
for(i=1;i<=9;i++)
stat[map[i][y]]++;
for(i=1;i<=9;i++)
if(stat[i]!=1) return 0;
return 1;
}
int tjy(int x)
{
int stat[10]={0};
int i;
for(i=1;i<=9;i++)
stat[map[x][i]]++;
for(i=1;i<=9;i++)
if(stat[i]!=1) return 0;
return 1;
}
int tjn(int x,int y)
{
int stat[10]={0};
int i,r;
for(i=x;i<=x+2;i++)
for(r=y;r<=y+2;r++)
stat[map[i][r]]++;
for(i=1;i<=9;i++)
if(stat[i]!=1) return 0;
return 1;
}
int main()
{
int i,r;
for(i=1;i<=9;i++)
for(r=1;r<=9;r++)
scanf("%d",&map[i][r]);
int heng=0;
int shu=0;
int nine=0;
for(i=1;i<=9;i++)
{
shu+=tjx(i);
heng+=tjy(i);
}
nine+=tjn(1,1);
nine+=tjn(1,4);
nine+=tjn(1,7);
nine+=tjn(4,1);
nine+=tjn(4,4);
nine+=tjn(4,7);
nine+=tjn(7,1);
nine+=tjn(7,4);
nine+=tjn(7,7);
if(heng+shu+nine==27) printf("1");
else printf("0");
return 0;
}
RQNOJ 238 火炬手之梦
//此题需要一定的数学技巧。需要理解此函数的几何意义。
//同时考察格式化输出。
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,d;
scanf("%f%f%f%f",&a,&b,&c,&d);
printf("%0.3f",sqrt((sqrt(b)+sqrt(d))*(sqrt(b)+sqrt(d))+(a-c)*(a-c)));
return 0;
}
RQNOJ 224 [JSOI2007]手机
//打个表。虽然我承认这个表并不太好。
#include <stdio.h>
#include <string.h>
int sum;
void tj(char ch)
{
if(ch=='a'||ch=='d'||ch=='g'||ch=='j'||ch=='m'||ch=='p'||ch=='t'||ch=='w'||ch==' ') sum++;
if(ch=='b'||ch=='e'||ch=='h'||ch=='k'||ch=='n'||ch=='q'||ch=='u'||ch=='x') sum+=2;
if(ch=='c'||ch=='f'||ch=='i'||ch=='l'||ch=='o'||ch=='r'||ch=='v'||ch=='y') sum+=3;
if(ch=='s'||ch=='z') sum+=4;
}
int main()
{
sum=0;
char in[201]={0};
gets(in);
int i;
for(i=0;in[i]!=0;i++)
tj(in[i]);
printf("%d",sum);
return 0;
}
RQNOJ 16 谁拿了最多奖学金
//读取数据时要极度小心。
#include <stdio.h>
int main()
{
struct Student {
char name[21];
int score;
int class;
char gb;
char west;
int art;
int money;
} stu[101];
int n;
int i;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%s %d %d %c %c %d",stu[i].name,&stu[i].score,&stu[i].class,&stu[i].gb,&stu[i].west,&stu[i].art);
for(i=1;i<=n;i++)
{
stu[i].money=0;
if(stu[i].score>80&&stu[i].art>0) stu[i].money+=8000;
if(stu[i].score>85&&stu[i].class>80) stu[i].money+=4000;
if(stu[i].score>90) stu[i].money+=2000;
if(stu[i].west=='Y'&&stu[i].score>85) stu[i].money+=1000;
if(stu[i].gb=='Y'&&stu[i].class>80) stu[i].money+=850;
}
int max=0;
int pos=0;
int sum=0;
for(i=1;i<=n;i++)
if(stu[i].money>max)
{
max=stu[i].money;
pos=i;
sum+=stu[i].money;
}
else sum+=stu[i].money;
printf("%s\n",stu[pos].name);
printf("%d\n",stu[pos].money);
printf("%d",sum);
return 0;
}
RQNOJ 153 数的计算
#include <stdio.h>
int ff(int now)
{
if(now==0) return 1;
else
{
int i,sum=0;
for(i=now/2;i>=0;i--)
sum+=ff(i);
return sum;
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",ff(n));
return 0;
}
RQNOJ 144 伯虎点秋香
//此题应当注意字符串的操作。
//确保字符串函数不要用错!
#include <stdio.h>
#include <string.h>
void swap(char* a,char* b)
{
char temp[1001];
strcpy(temp,a);
strcpy(a,b);
strcpy(b,temp);
}
int main()
{
int n;
char name[1001][1001];
char nnn[1001];
scanf("%d",&n);
int k;
scanf("%d",&k);
int i,r;
for(i=1;i<=n;i++)
{
scanf("%s",&name[i][0]);
}
for(i=1;i<=n;i++)
for(r=n;r>=i+1;r--)
if(strcmp(&name[i][0],&name[r][0])>0) swap(&name[i][0],&name[r][0]);
printf("%s",&name[k][0]);
return 0;
}
RQNOJ 96 苹果摘陶陶
//果然是一道恶俗的题目。这里强调一下我用的qsort函数。
//貌似竞赛是可以用许多标准库的。(用C++福气更好,STL,汗)
//对了,这道题很坑人,陶陶高度不能为0哦。
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b)
{
return *(int *)b-*(int *)a;
}
int main()
{
int n,m;
int gh[2001]={0};
int th[2001]={0};
scanf("%d%d",&n,&m);
int i;
int y=m;
for(i=1;i<=n;i++) scanf("%d",&gh[i]);
for(i=1;i<=m;i++) scanf("%d",&th[i]);
qsort(&th[1],m,sizeof(th[1]),cmp);
for(i=1;i<=n;i++)
{
int r;
for(r=1;r<=m;r++)
{
if(gh[i]>th[r]&&th[r]>0)
{
y--;
th[r]=-1;
break;
}
}
}
printf("%d",y);
return 0;
}