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
解释:
判断个数问题;
如果:
=0:退出循环
=1:统计得分,得分个数初始化为0,为后面=2做准备
=2:统计得分个数,累加2与得分个数的乘积
第四题:开灯问题