C语言程序设计之 数组2020-10-28

C语言程序设计之 数组2020-10-28 整理: 第一题:求最小数与第一个数交换

【问题描述】

​ 输入一个正整数n (1<n<=100),再输入n个整数,将最小值与第一个数交换,然后输出交换后的n 个数。

【输入形式】

​ 第一行,一个正整数n

​ 第二行,n个由空格隔开的整数
【输出形式】

​ 最小数与第一个数交换后的n的整数
【样例输入】

5

8 2 5 1 4
【样例输出】

1 2 5 8 4

#include <stdio.h> #include <stdlib.h> int main() { int n,i,j,k; int x[100]; scanf("%d",&n); //数组元素 for(i=0;i<n;i++){ scanf("%d",&x[i]); } //printf("%d",t); k = 0; for(j=1;j<n;j++){ if(x[k]>x[j]){ k=j; } } //交换 int t = x[0]; x[0] = x[k]; x[k] = t; for(k=0;k<n;k++){ printf("%d ",x[k]); } return 0; }

解释

数组循环存储不解释,很好理解;

首先我们假设最小值的下标为0,即:k=0;

我们所需要做的就是把后面的数与最小值进行比较,如果还有比最小值小的值,则交换下标;

k = 0; for(j=1;j<n;j++){ if(x[k]>x[j]){ k=j; } }

找到最小值的下标,也就找到了最小值的值,然后进行最小值与第一个数进行交换;

//交换 int t = x[0]; x[0] = x[k]; x[k] = t;

两个元素的交换需要通过中间变量(t)来存储,要不然会有数据被覆盖掉,得不到正确的值;

最好循环遍历整个数组即可。

第二题:求一组数的编号

【问题描述】

对数组A中的N(0<N<100)个互不相同的整数从小到大进行连续编号,要求不能改变数组A中元素的顺序。

如A=(78,42,-34,94,25)则输出为(4,3,1,5,2)。个数N和数组中元素要求从键盘输入。

【输入形式】

第一行,一个整数N

第二行n个空格隔开的整数

【输出形式】

按顺序输出每个整数的编号,编号间用逗号分隔
【样例输入】

5

78 42 -34 94 25

【样例输出】

4,3,1,5,2

#include <stdio.h> int main() { int x[100]; int a[100]; int n; int num; int count=0; scanf("%d",&n); //输入数据存入数组中 for (int i = 0; i < n; ++i) { scanf("%d",&x[i]); //初始化 a[i]=1; } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (x[i]>=x[j]){ num ++; } } a[i] =num; num =0; } for (int i = 0; i < n; ++i) { count++; if(count==n){ printf("%d",a[i]); } else{ printf("%d,",a[i]); } } return 0; }

解释:

判断元素的编号,实际是比大小;

定义两个数组,一个存储输入的元素,一个存储记录比较的次数;

对两个数组进行初始化;

两层循环,将第一个元素与每个元素进行比较,如果符合条件的进行记录num++;

每次结束后在第一层循环里记录num的值,并保存到a[]数组中;

将num清零,重复上述操作;

for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (x[i]>=x[j]){ num ++; } } a[i] =num; num =0; }

为了满足输出的操作,需要输出a[]数组时判断最后的值,

for (int i = 0; i < n; ++i) { count++; if(count==n){ printf("%d",a[i]); } else{ printf("%d,",a[i]); } } 第三题:跳一跳

【问题描述】跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8...)。

现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。

【输入格式】

输入包含多个数字,用空格分隔,每个数字都是1,2,0之一,1表示此次跳跃跳到了方块上但是没有跳到中心,2表示此次跳跃跳到了方块上并且跳到了方块中心,0表示此次跳跃没有跳到方块上(此时游戏结束)。

【输入形式】对于所有评测用例,输入的数字不超过30个,保证0正好出现一次且为最后一个数字。

【输出形式】一个整数,表示得分。
【样例输入】1 1 2 2 2 1 1 2 2 0

【样例输出】22
【样例说明】22=1+1+2+4+6+ 1+1+2+4

#include <stdio.h> int main() { int n; //统计得分,记录得分个数 int sum=0,temp=0; //题目知不超过30 for (int i = 0; i<30; i++) { scanf("%d",&n); if(n==0){ break; } if (n==1){ //计数清零 temp=0; sum +=1; } if(n==2){ temp +=1; sum +=temp*2; } } printf("%d",sum); return 0; }

解释:

判断个数问题;

如果:

=0:退出循环

=1:统计得分,得分个数初始化为0,为后面=2做准备

=2:统计得分个数,累加2与得分个数的乘积

第四题:开灯问题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgxdz.html