id:374 A.求最大值及其下标
题目描述
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例
输出样例
题解
- 首先用for循环将n个整数赋值给数组
- 然后将最大值及其最小的下标分别赋值给数组的第一个变量和0
- 接着再用一个for循环,找出最大值及其最小下标
- 找出最大值及其最小下标的方法是一个if判断语句
- 最后输出
代码
#include <stdio.h>
#include <stdlib.h>
# define MAX 11int main(int argc, char *argv[])
{int n, a[MAX], i, max, j, x;scanf("%d", &n);for (i = 0; i < n; i++){scanf("%d", &a[i]);}max = a[0];x = 0;for (j = 1; j < n; j++){if (max < a[j]){max = a[j];x = j;}}printf("%d %d", max, x);return 0;
}
id:376 B.简化的插入排序
题目描述
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入
输入在第一行先给出非负整数N(<=10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出
输入在第一行先给出非负整数N(<=10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出样例
输出样例
题解
- 首先用一个for循环输入N个从小到大排序好顺序的整数,然后输入整数X
- 然后用一个for循环及其一个if条件判断语句判断X应该插入的位置,即判断大小
- 第一种情况,如果X应该排在这些整数的中间,则用一个for循环,先将应在X之后的数字全部往后移一位,应从最后一位开始移,空出来的位置则插入X,然后break,结束循环
- 第二种情况,如果X应该排在第一位,则马上输出X的值,然后用一个for循环,将数组全部输出,然后return 0;结束整个函数
- 第三种情况,X应该排在最后一位…
- 在第一种情况下,下一步是再用一个for循环,将整个数组全部输出,然后结束整个函数
代码
#include <stdio.h>
#include <stdlib.h>
# define MAX 11int main(int argc, char *argv[])
{int N, X, a[MAX], i, j, k, y, z;scanf("%d", &N);for (i = 0; i < N; i++){scanf("%d", &a[i]);}scanf("%d", &X);for (y = 0; y < N; y++){if (X >= a[y] && X <= a[y + 1]){for (j = N; j > y + 1; j--){a[j] = a[j - 1];}a[y + 1] = X;break;}else if (X < a[y]){printf("%d ", X);for (k = 0; k < N; k++){printf("%d ", a[k]);}return 0;}}for (k = 0; k <= N; k++){printf("%d ", a[k]);}return 0;
}
id:471 C.交换最小值和最大值
题目描述
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例
输出样例
题解
- 首先用一个for循环将N个整数赋值给数组
- 然后用一个for循环和一个if条件判断语句遍历整个数组找出最小值,然后将最小值与第一个数交换
- 同理,接着找出最大值,然后交换
- 最后,输出y交换完后的整个数组
代码
#include <stdio.h>
#include <stdlib.h>
# define MAX 11int main(int argc, char *argv[])
{int N, a[MAX], i, min, max, j, x, y, z, t, s, g;scanf("%d", &N);x = 0;y = 0;for (i = 0; i < N; i++){scanf("%d", &a[i]);}min = a[0];for (j = 1; j < N; j++){if (min > a[j]){min = a[j];y = j;}}z = a[0];a[0] = min;a[y] = z;max = a[0];for (g = 1; g < N; g++){if (max < a[g]){max = a[g];x = g;}}t = a[N - 1];a[N - 1] = max;a[x] = t;for (s = 0; s < N; s++){printf("%d ", a[s]);}return 0;
}
id:467 D.求整数序列中出现次数最多的数
题目描述
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例
输出样例
题解
- 首先用一个for循环输入N个整数
- 然后用一个for循环遍历整个数组,再嵌套一个for循环也是遍历整个数组,这个循环的目的是找出在这个数组中是否有与之相同的数,若有,则计数器加一,并另取一个变量储存这个计数器的值,目的是,若下次计数器的值大于这个变量,则更新这个变量的值,这个变量的值就是出现这个数次数最多的次数,且要另取一个变量储存这个出现次数最多的整数;在第二个循环完成后都要重新赋0值给计数器,便于下次计数
- 最后输出
代码
#include <stdio.h>
#include <stdlib.h>
# define MAX 1001int main(int argc, char *argv[])
{int N, a[MAX], i, j, k, count, x, y;scanf("%d", &N);x = 0;count = 0;for (i = 0; i < N; i++){scanf("%d", &a[i]);}for (j = 0; j < N; j++){for (k = 0; k < N; k++){if (a[j] == a[k]){count++;if (count > x){x = count;y = a[j];}}}count = 0;}printf("%d %d", y, x);return 0;
}
id:468 E.找出不是两个数组共有的元素
题目描述
给定两个整型数组,本题要求找出不是两者共有的元素。
输入
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例
输出样例
题解
- 首先输入两个数组的值
- 然后先判断在第一个数组出现的数在第二个数组中是否出现,然后另有一个数组用来记录已经输出过的值,接着判断这个值是否已经被输出过,若都没有则按照是不是一个输出的值来输出
- 同样的方法判断在第二个数组中出现的数是否在第一个数组中出现过
代码
#include <stdio.h>
#include <stdlib.h>
# define M 21
# define N 21int main(int argc, char *argv[])
{int m, n, a[M], b[N], i, j, k, x, y, z, printed[M+N];scanf("%d", &m);y = 0;z = 0;for (i = 0; i < m; i++){scanf("%d", &a[i]);}scanf("%d", &n);for (j = 0; j < n; j++){scanf("%d", &b[j]);}for (k = 0; k < m; k++){for (x = 0; x < n; x++){if (a[k] == b[x]){y = 1;break;}}for (x = 0; x < z; x++){if (a[k] == printed[x]){y = 1;break;}}if (y == 0){if (z == 0){printf("%d", a[k]);}else{printf(" %d", a[k]);}printed[z++] = a[k];}y = 0;}for (k = 0; k < n; k++){for (x = 0; x < m; x++){if (b[k] == a[x]){y = 1;break;}}for (x = 0; x < z; x++){if (b[k] == printed[x]){y = 1;break;}}if (y == 0){printf(" %d", b[k]);printed[z++] = b[k];}y = 0;}return 0;
}