//此题坑人之处在于,明文密文必须“互相”对应,既不重复,也不遗漏。 //从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; }