Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21405
  • 博文数量: 12
  • 博客积分: 271
  • 博客等级: 二等列兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-05 11:17
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友
最近访客

分类: C/C++

2012-05-05 16:09:10

能花上4个多小时参与这次比赛我感到很值得。虽然成绩不是非常的满意,但是我也经历了学习了很多。

这次比赛的题目我认为不是特别的难(仅就非选做题而言),因为我时间把握的不是太到位,在一些问题上犹豫了太多的时间从而让我的表现表现不佳。困扰我的问题主要是一些计算机原理方面的问题。
说明我对程序代码细微知识的把握还是不行。

下面容我详细谈谈我参加比赛的的感触。

1.孔融让梨
思路:其实最小梨孩子吃掉,剩下的所有梨加起来就是父母得到梨的质量。根据此思路,可以减少计算机工作量和减少很多冗余的代码。

源代码

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main()
  3. {
  4.  int n,i,a,min=65535,sum=0; //min预置较大值,sum预置为0,便于比较。
  5.  scanf("%d",&n);
  6.  for(i=1;i<=n;i++)
  7.  {
  8.   scanf("%d",&a);
  9.   if(min>a)
  10.    min=a; //找出最小的梨,即孩子吃得梨。
  11.   sum+=a; //将所有梨加起来,最后减去min即可。
  12.  }
  13.  printf("%d\n",sum-min);
  14.  return 0;
  15. }

PS:此题较为简单。思路容易想出。


2.打印方块
思路:打印方阵,代码骨架必然是两个循环嵌套。
源代码:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main()
  3. {
  4.  int n,j;
  5.  int a;
  6.  scanf("%d",&n);

  7.  for(j=1;j<=n;j++) //首层末层没有#,故单独打印(在循环变量无其他用途时。三个单独循环可以共用一个循环变量,可以节省空间)
  8.   printf("*");
  9.  printf("\n");
  10.  for(j=1;j<=2*n-5;j=j+2)
  11.  {
  12.   if(j<=n-2) //此分支j代表#个数
  13.   {
  14.    for(a=1;a<=(n-j)/2;a++)
  15.     printf("*");
  16.    for(a=1;a<=j;a++)
  17.     printf("#");
  18.    for(a=1;a<=(n-j)/2;a++)
  19.     printf("*");
  20.    printf("\n");
  21.   }
  22.   else //此分支中,由于j超出最大值。故#个数由公式转换得出。(j+4-n)/2
  23.   {
  24.    for(a=1;a<=(j+4-n)/2;a++)
  25.     printf("*");
  26.    for(a=1;a<=2*n-j-4;a++)
  27.     printf("#");
  28.    for(a=1;a<=(j+4-n)/2;a++)
  29.     printf("*");
  30.    printf("\n");
  31.    }
  32.  }
  33.  for(j=1;j<=n;j++)
  34.   printf("*");
  35.  printf("\n");
  36.  return 0;
  37. }


 

阅读(948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~