Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20926
  • 博文数量: 7
  • 博客积分: 260
  • 博客等级: 入伍新兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-01 14:57
文章分类

全部博文(7)

文章存档

2012年(7)

最近访客

分类: C/C++

2012-05-22 16:22:32

1.487-3279
题意:给出若干个含'-'字母,数字的字符串,去掉'-',按照规律吧字母装换成数字。输出其中重复的数字串。

点击(此处)折叠或打开

  1. #include
  2. #include
  3. #include"stdlib.h"
  4. char find(char x)
  5. {
  6. if(x=='A'||x=='B'||x=='C') return '2';
  7. else if(x=='D'||x=='E'||x=='F') return '3';
  8. else if(x=='G'||x=='H'||x=='I') return '4';
  9. else if(x=='J'||x=='K'||x=='L') return '5';
  10. else if(x=='M'||x=='N'||x=='O') return '6';
  11. else if(x=='P'||x=='R'||x=='S') return '7';
  12. else if(x=='T'||x=='U'||x=='V') return '8';
  13. else if(x=='W'||x=='X'||x=='Y') return '9';
  14. return '0';
  15. }
  16. int cmp(const void *c,const void*b)
  17. {
  18. return strcmp((char*)c,(char*)b);
  19. }
  20. char a[100005][20];
  21. int main()
  22. {
  23. int n,i,j,ant,leap;
  24. char c;
  25. scanf("%d",&n);
  26. getchar();
  27. for(i=0;i{
  28. c=getchar();
  29. j=0;
  30. if(c>='A'&&c<='Z')
  31. c=find(c);
  32. while(c!='\n')
  33. {
  34. if(c>='0'&&c<='9')
  35. a[i][j ]=c;
  36. c=getchar();
  37. if(c>='A'&&c<='Z')
  38. c=find(c);
  39. }
  40. a[i][7]='\0';
  41. }
  42. qsort(a,n,sizeof(a[0]),cmp);
  43. leap=0;
  44. for(i=0;i{
  45. ant=0;
  46. strcpy(a[100004],a[i]);
  47. while(strcmp(a[100004],a[i 1])==0&&i{
  48. ant++;
  49. i++;
  50. }
  51. if(ant>0)
  52. {
  53. printf("%c%c%c-%s %d\n",a[100004][0],a[100004][1],a[100004][2],&a[100004][3],ant 1);
  54. leap=1;
  55. }
  56. }
  57. if(!leap)
  58. printf("No duplicates.");
  59. return 0;
  60. }
解题思路:先对输入字符串进行处理,把‘-’过滤,将字母一次换成数字。记得在字符串后加'\0',我就是这个忘记了,牢记啊!。然后,用快排将N个字符串按字典符排序(方便输出)。最后用一个计数器从上往下遍历,每遇到相同的使计数器自加,输出计数器大于0的就好。
输出这里要注意,没有输出要输一句话。(我又错在这一次)
B Who's in the Middle
描述给若干个数(奇数),求其中位数。

点击(此处)折叠或打开

  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. int cmp(const void*a,const void *b)
  4. {
  5. int *p,*q;
  6. p=(int*)a;
  7. q=(int*)b;
  8. if(*p>=*q)
  9. return 1;
  10. return -1;
  11. }
  12. int main()
  13. {
  14. int N,i;
  15. int a[10000];
  16. scanf("%d",&N);
  17. for(i=0;i
  18. scanf("%d",&a[i]);
  19. qsort(a,N,sizeof(a[0]),cmp);
  20. printf("%d\n",a[N/2]);
  21. return 0;
  22. }
思路:快排后取第N/2个数。这里用快排函数时注意:返回值只有1和-1没有0.
 
C.Bank Interest
描述:给出基数,利率,年份,求N年后的本+利。

点击(此处)折叠或打开

  1. #include"stdio.h"
  2. int main()
  3. {
  4. double s,R;
  5. int i,r,m,y;
  6. scanf("%d%d%d",&r,&m,&y);
  7. s=m;
  8. R=r*0.01+1;
  9. for(i=0;i
  10. s*=R;
  11. printf("%d\n",(int)s);
  12. }
思路:一个循环随年份控制算出本利即可。注意:小数计算最好用double,float不靠谱~做了就错了。

  
描述:输出M组N次图形:
1
22
333
。。。
。。。
333
22
1

点击(此处)折叠或打开

  1. #include"stdio.h"
  2. int main()
  3. {
  4. int N,m,n,i,j,k,l;
  5. scanf("%d",&N);
  6. for(i=1;i<=N;i++)
  7. {
  8. scanf("%d%d",&m,&n);
  9. for(j=0;j
  10. {
  11. for(k=1;k<=m;k++)
  12. {
  13. for(l=1;l<=k;l++)
  14. printf("%d",k);
  15. printf("\n");
  16. }
  17. for(k=m-1;k>=1;k--)
  18. {
  19. for(l=1;l<=k;l++)
  20. printf("%d",k);
  21. printf("\n");
  22. }
  23. if(j
  24. printf("\n");
  25. }
  26. if(i
  27. printf("\n");
  28. }
  29. return 0;
  30. }
思路:每组+每次+每行+每个数字,一共四层循环解决问题。注意回车问题!

阅读(1127) | 评论(0) | 转发(0) |
0

上一篇:1002林老师的作业

下一篇:帮忙看看

给主人留下些什么吧!~~