我是靠谱客的博主 怡然冰淇淋,这篇文章主要介绍18.3.7给小可爱们的(NBUOJ)1155 一维数组逆序显示1158 有序数组的查找1153 一维数组的插入1147 简单评委打分1252 一位数出现的次数总结:,现在分享给大家,希望可以做个参考。

1155 一维数组逆序显示

  • 思路1:先倒序(回文类似),再输出
  • 思路2:直接反着输出
  • 思路2代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
int digit[15];//一般都多开几个,比如要求1e5个,那我会开1e5+10个 int i; for(i=0;i<10;i++){ scanf("%d",&digit[i]); } printf("%d",digit[9]); for(i=8;i>=0;i--){ printf(" %d",digit[i]); } printf("n");

1158 有序数组的查找

  • 思路:条件:10个数;升序;∴easy
  • 代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int digit[15]; int i,key; for(i=0;i<10;i++){ scanf("%d",&digit[i]); } scanf("%d",&key); int flag=1; for(i=0;i<10;i++){ if(digit[i] == key){ printf("%dn",i); flag=0; break; } } if(flag){ printf("not foundn"); }

1153 一维数组的插入

  • 思路1:将数据插入到原数组之后再排序
  • 思路2:条件:1.原数组升序;2.只插入一个数key3.数据量非常小。结论:我们可以懒省事儿一下,只输出,不排序,但是要考虑边界。
  • 思路3:从后往前边找边挪,找到后插入,最后输出

  • 思路1代码:太简单了,略吧。
  • 思路2代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int digit[15]; int i,key; //输入 for(i=0;i<10;i++){ scanf("%d",&digit[i]); } scanf("%d",&key); if(key<digit[0])//边界 printf("%d ",key); printf("%d ",digit[0]); for(i=1;i<10;i++){ if(key > digit[i-1] && key < digit[i]){ printf("%d ",key); } printf("%d ",digit[i]); } if(key > digit[9]){//边界 printf("%d ",key); } printf("n");

  •  思路3代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int digit[15]; int i,key; //输入 for(i=0;i<10;i++){ scanf("%d",&digit[i]); } scanf("%d",&key); //处理 for(i=9;digit[i]>key;i--){ digit[i+1]=digit[i]; } digit[i+1]=key; //输出 for(i=0;i<11;i++){ printf("%d ",digit[i]); } printf("n");

1147 简单评委打分

  • 思路1:因为数据个数确定且非常小,所以可以先排序,再去首去尾计算均值
  • 思路2:计算和,找出最大值和最小值,用和减去最大最小值再除以6
 
  • 思路1代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
double score[10]; int i; //输入 for(i=0;i<8;i++){ scanf("%lf",&score[i]); } int j; //简单排序 for(i=0;i<7;i++){ for(j=i;j<8;j++){ if(score[i]<score[j]){ //swap(score[i],score[j]); double temp=score[i]; score[i]=score[j]; score[j]=temp; } } } double ave=0;//均值 for(i=1;i<7;i++){ ave+=score[i]; } ave/=6; printf("%.2fn",ave);

  • 思路2代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double score[10]; int i; for(i=0;i<8;i++){ scanf("%lf",&score[i]); } double sum,maxsc,minsc;//和、最大最小值 sum=0; maxsc=score[0]; minsc=score[0]; for(i=0;i<8;i++){ sum+=score[i]; if(maxsc<score[i]) maxsc=score[i]; if(minsc>score[i]) minsc=score[i]; } sum-=maxsc+minsc; double ave=sum/6; printf("%.2fn",ave);

  • 思路2精简版:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
//输入 for(i=0;i<8;i++){//边输入边计算 scanf("%lf",&score[i]); sum+=score[i]; if(i==0 || maxsc<score[i]) maxsc=score[i]; if(i==0 || minsc>score[i]) minsc=score[i]; } sum-=maxsc+minsc; double ave=sum/6;

1252 一位数出现的次数

  • 思路:用数组存储,输出时判断一下即可
  •  代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
int d; int num[15]={0};//还有一种清零的方法是memset,有兴趣的自行上网搜 while(scanf("%d",&d)!=EOF){ if(d<10) num[d]++; } int i; for(i=0;i<10;i++){ if(num[i]!=0){ printf("%d:%dn",i,num[i]); } }

总结:

列举一下一些小朋友的错误或者问题:

   1. for循环里面的i的范围要搞清楚。for(i=0;i<10;i++)可以用,for(i=1;i<=10;i++)也可以用,但是对于不同的情况可以选取合适的i减少代码量。有的人想表达相同的意思却写成for(i=0;i<=10;i++)那就不对了。有时候我们还会写for(i=10;i>0;i--),这时候i变成--,粗心的小朋友可能也会出错。
   2. 当你发现出现一个如下图所示的对话框,这一般代表着你的指针出问题了,以你们目前的阶段,可以检查一下自己有没有漏写scanf里面的&。等你们学了指针,会对此有更多理解。有的小朋友要是容易写出bug并且不能吃一堑长一智,不妨做一个bug笔记本,每次出错找不到的时候可以对着曾经出错点来找。

   3. 发现有的小朋友看到英语就怯场啊,但其实也就那些单词,很多书即使有单词不认识也不影响阅读。你们学机械,以后还要看很多英文文献和书籍,害怕看英文肯定不行的啦。起码CB告诉你的error应该看懂的~课上看到一只小朋友的errorarray subscript is not an integer。像这个提示呢,subscript(下标)不知道可以理解,但是array(数组)还是得知道的。再举几个简单例子,灰色跟白色的这种看不懂就要去查单词咯~还有呢,很多小朋友不知道Presentation Error 是什么意思,这是格式错误,常见的错误还有好几种,你们遇到了都可以去查一下,帮助你们修改代码哦~



       4.另外就是发现好些小朋友debug能力都比较弱,有兴趣的可以上CSDN上查一下如何用CB做debug,学姐可以用亲身经验告诉你们,写代码找不到bug是件很痛苦很痛苦的事情。。。如果实在玩不转CB的debug,那最好你写代码之前思路要够清晰;逻辑或者说算法没有问题;会用输出中间变量的方法检查错误。这样可能也差不多够用了。

 

 










最后

以上就是怡然冰淇淋最近收集整理的关于18.3.7给小可爱们的(NBUOJ)1155 一维数组逆序显示1158 有序数组的查找1153 一维数组的插入1147 简单评委打分1252 一位数出现的次数总结:的全部内容,更多相关18.3.7给小可爱们的(NBUOJ)1155内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部