1.487-3279
题意:给出若干个含'-'字母,数字的字符串,去掉'-',按照规律吧字母装换成数字。输出其中重复的数字串。
- #include
- #include
- #include"stdlib.h"
-
- char find(char x)
- {
- if(x=='A'||x=='B'||x=='C') return '2';
- else if(x=='D'||x=='E'||x=='F') return '3';
- else if(x=='G'||x=='H'||x=='I') return '4';
- else if(x=='J'||x=='K'||x=='L') return '5';
- else if(x=='M'||x=='N'||x=='O') return '6';
- else if(x=='P'||x=='R'||x=='S') return '7';
- else if(x=='T'||x=='U'||x=='V') return '8';
- else if(x=='W'||x=='X'||x=='Y') return '9';
- return '0';
- }
-
- int cmp(const void *c,const void*b)
- {
- return strcmp((char*)c,(char*)b);
- }
-
- char a[100005][20];
-
- int main()
- {
- int n,i,j,ant,leap;
- char c;
- scanf("%d",&n);
- getchar();
- for(i=0;i{
- c=getchar();
- j=0;
- if(c>='A'&&c<='Z')
- c=find(c);
- while(c!='\n')
- {
- if(c>='0'&&c<='9')
- a[i][j ]=c;
- c=getchar();
- if(c>='A'&&c<='Z')
- c=find(c);
- }
- a[i][7]='\0';
- }
-
- qsort(a,n,sizeof(a[0]),cmp);
- leap=0;
- for(i=0;i{
- ant=0;
- strcpy(a[100004],a[i]);
- while(strcmp(a[100004],a[i 1])==0&&i{
- ant++;
- i++;
- }
- if(ant>0)
- {
- printf("%c%c%c-%s %d\n",a[100004][0],a[100004][1],a[100004][2],&a[100004][3],ant 1);
- leap=1;
- }
- }
- if(!leap)
- printf("No duplicates.");
- return 0;
- }
解题思路:先对输入字符串进行处理,把‘-’过滤,将字母一次换成数字。记得在字符串后加'\0',我就是这个忘记了,牢记啊!。然后,用快排将N个字符串按字典符排序(方便输出)。最后用一个计数器从上往下遍历,每遇到相同的使计数器自加,输出计数器大于0的就好。
输出这里要注意,没有输出要输一句话。(我又错在这一次)
B Who's in the Middle
描述给若干个数(奇数),求其中位数。
- #include"stdio.h"
- #include"stdlib.h"
- int cmp(const void*a,const void *b)
- {
- int *p,*q;
- p=(int*)a;
- q=(int*)b;
- if(*p>=*q)
- return 1;
- return -1;
- }
- int main()
- {
- int N,i;
- int a[10000];
- scanf("%d",&N);
- for(i=0;i
- scanf("%d",&a[i]);
- qsort(a,N,sizeof(a[0]),cmp);
- printf("%d\n",a[N/2]);
- return 0;
- }
思路:快排后取第N/2个数。这里用快排函数时注意:返回值只有1和-1没有0.
C.Bank Interest
描述:给出基数,利率,年份,求N年后的本+利。
- #include"stdio.h"
- int main()
- {
- double s,R;
- int i,r,m,y;
- scanf("%d%d%d",&r,&m,&y);
- s=m;
- R=r*0.01+1;
- for(i=0;i
- s*=R;
- printf("%d\n",(int)s);
- }
思路:一个循环随年份控制算出本利即可。注意:小数计算最好用double,float不靠谱~做了就错了。
描述:输出M组N次图形:
1
22
333
。。。
。。。
333
22
1
- #include"stdio.h"
- int main()
- {
- int N,m,n,i,j,k,l;
- scanf("%d",&N);
- for(i=1;i<=N;i++)
- {
- scanf("%d%d",&m,&n);
- for(j=0;j
- {
- for(k=1;k<=m;k++)
- {
- for(l=1;l<=k;l++)
- printf("%d",k);
- printf("\n");
- }
- for(k=m-1;k>=1;k--)
- {
- for(l=1;l<=k;l++)
- printf("%d",k);
- printf("\n");
- }
- if(j
- printf("\n");
- }
- if(i
- printf("\n");
- }
- return 0;
- }
思路:每组+每次+每行+每个数字,一共四层循环解决问题。注意回车问题!
阅读(1127) | 评论(0) | 转发(0) |