实验7-1-1-一维数组 简化的插入排序
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
#include<stdio.h>
int main() {
int n;
scanf("%d", &n);
int i;
int a[10];
for (i = 0; i < n; i++) scanf("%d", &a[i]);
int x;
scanf("%d", &x);
i = 0;
if (x >= a[n - 1]) a[n] = x;
else {
while (i < n + 1) {
if (a[i] >= x) {
for (int j = n; j > i; j--) {
a[j] = a[j - 1];
}
break;
}
i++;
}
a[i] = x;
}
for (int i = 0; i <= n; i++) printf("%d ", a[i]);
return 0;
}
实验7-1-2-一维数组/for 求最大值及其下标
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
#include<stdio.h>
int main() {
int a[11];
int x;
scanf("%d", &x);
int i = 0;
for (i = 0; i < x; i++) scanf("%d", &a[i]);
int max = a[0];
for (i = 1; i < x; i++) {
if (a[i] >= max) max = a[i];
else max = max;
}
printf("%d ", max);
for (i = 0; i < x; i++) {
if (a[i] == max) {
printf("%d", i);
break;
}
}
return 0;
}
实验7-1-3-一维数组/for 将数组中的数逆序存放
本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。
输入格式:
输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。
输入样例:
4
10 8 1 2
输出样例:
2 1 8 10
#include<stdio.h>
int main() {
int a[11];
int n, i;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int x = n - 1;
for (x = n - 1; x >= 0; x--) {
printf("%d", a[x]);
if (x >= 1) printf(" ");
}
return 0;
}
实验7-1-4-一维数组 找出不是两个数组共有的元素
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
输入样例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
输出样例:
3 5 -15 6 4 1
#include<stdio.h>
int main() {
int m, i, a[20];
scanf("%d", &m);
for (i = 0; i < m; i++) scanf("%d", &a[i]);
int n, j, b[20];
scanf("%d", &n);
for (j = 0; j < n; j++) scanf("%d", &b[j]);
int cnt;
int k[40];
int p = 0;
for (i = 0; i < m; i++) {
cnt = 0;
for (j = 0; j < n; j++) {
if (a[i] != b[j]) {
cnt++;
for (int x = 0; x < i; x++) {
if (a[i] == a[x]) cnt = 0;
}
}
}
if (cnt == n) {
k[p] = a[i];
p++;
}
}
for (j = 0; j < n; j++) {
cnt = 0;
for (i = 0; i < m; i++) {
if (b[j] != a[i]) {
cnt++;
for (int x = 0; x < j; x++) {
if (b[j] == b[x]) cnt = 0;
}
}
}
if (cnt == m) {
k[p] = b[j];
p++;
}
}
printf("%d", k[0]);
for (i = 1; i < p; i++) printf(" %d", k[i]);
return 0;
}
实验7-1-5-一维数组 选择法排序
本题要求将给定的n个整数从大到小排序后输出。
输入格式:
输入第一行给出一个不超过10的正整数n。第二行给出n个整数,其间以空格分隔。
输出格式:
在一行中输出从大到小有序的数列,相邻数字间有一个空格,行末不得有多余空格。
输入样例:
4
5 1 7 6
输出样例:
7 6 5 1
#include<stdio.h>
int main() {
int a[11];
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; i++) scanf("%d", &a[i]);
int j;
int x;
for (j = 0; j < n; j++) {
for (i = 0; i < n - j - 1; i++) {
if (a[i] < a[i + 1]) {
x = a[i];
a[i] = a[i + 1];
a[i + 1] = x;
}
}
}
for (i = 0; i < n; i++) {
printf("%d", a[i]);
if (i < n - 1) printf(" ");
}
return 0;
}
实验7-1-6-一维数组 求一批整数中出现最多的个位数字
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式“M: n1 n2 …”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
输入样例:
3
1234 2345 3456
输出样例:
3: 3 4
#include<stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[1000];
int i;
int k[100000];
int p = 0;
int q;
for (i = 0; i < n; i++) scanf("%d", &a[i]);
i = 0;
while (i < n) {
if (a[i] == 0) {
k[p] = 0;
p++;
} else {
while (a[i] != 0) {
q = a[i] % 10;
k[p] = q;
p++;
a[i] /= 10;
}
}
i++;
}
int b[10] = {0};
for (i = 0; i < p; i++) {
if (k[i] == 0) b[0]++;
else if (k[i] == 1) b[1]++;
else if (k[i] == 2) b[2]++;
else if (k[i] == 3) b[3]++;
else if (k[i] == 4) b[4]++;
else if (k[i] == 5) b[5]++;
else if (k[i] == 6) b[6]++;
else if (k[i] == 7) b[7]++;
else if (k[i] == 8) b[8]++;
else if (k[i] == 9) b[9]++;
}
int max = 0;
for (i = 0; i < 10; i++) {
if (b[i] >= max) max = b[i];
}
printf("%d:", max);
for (i = 0; i < 10; i++) {
if (b[i] == max) printf(" %d", i);
}
return 0;
}
实验7-1-7-一维数组 查找整数
本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。
输入格式:
输入在第一行中给出两个正整数N(≤20)和X,第二行给出N个整数。数字均不超过长整型,其间以空格分隔。
输出格式:
在一行中输出X的位置,或者“Not Found”。
输入样例1:
5 7
3 5 7 1 9
输出样例1:
2
输入样例2:
5 7
3 5 8 1 9
输出样例2:
Not Found
#include<stdio.h>
int main() {
int n, x;
scanf("%d %d", &n, &x);
int i, cnt = 0;
int a[21];
for (i = 0; i < n; i++) scanf("%d", &a[i]);
for (i = 0; i < n; i++) {
if (a[i] == x) {
printf("%d", i);
cnt++;
break;
}
}
if (cnt == 0) printf("Not Found");
return 0;
}
实验7-1-8-一维数组 输出数组元素
本题要求编写程序,对顺序读入的n个整数,顺次计算后项减前项之差,并按每行三个元素的格式输出结果。
输入格式:
输入的第一行给出正整数n(1<n≤10)。随后一行给出n个整数,其间以空格分隔。
输出格式:
顺次计算后项减前项之差,并按每行三个元素的格式输出结果。数字间空一格,行末不得有多余空格。
输入样例:
10
5 1 7 14 6 36 4 28 50 100
输出样例:
-4 6 7
-8 30 -32
24 22 50
#include<stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[11];
int i;
for (i = 0; i < n; i++) scanf("%d", &a[i]);
int y = 1;
i = 0;
if (n == 2) printf("%d\n", a[1] - a[0]);
else {
while (i < n - 1) {
printf("%d", a[i + 1] - a[i]);
if (y < n - 1) {
if (y % 3 != 0)printf(" ");
if (y % 3 == 0) printf("\n");
}
y++;
i++;
}
}
return 0;
}
实验7-1-9-一维数组 数字加密
输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。
输入格式:
输入在一行中给出一个四位的整数x,即要求被加密的数。
输出格式:
在一行中按照格式“The encrypted number is V”输出加密后得到的新数V。
输入样例:
1257
输出样例:
The encrypted number is 4601
#include<stdio.h>
int main() {
int x;
scanf("%d", &x);
int a[5];
int i = 0;
for (i = 0; i < 4; i++) {
a[i] = (x % 10 + 9) % 10;
x /= 10;
}
printf("The encrypted number is %0.4d", 1000 * a[1] + 100 * a[0] + 10 * a[3] + a[2]);
return 0;
}
实验7-1-10-一维数组 交换最小值和最大值
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
int main() {
int a[10];
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; i++) scanf("%d", &a[i]);
int b;
int min = 100000000;
for (i = 0; i < n; i++) {
if (a[i] <= min) min = a[i];
}
for (i = 0; i < n; i++) {
if (a[i] == min) {
b = a[i];
a[i] = a[0];
a[0] = b;
}
}
int max = -100000000;
for (i = 0; i < n; i++) {
if (a[i] >= max) max = a[i];
}
for (i = 0; i < n; i++) {
if (a[i] == max) {
b = a[i];
a[i] = a[n - 1];
a[n - 1] = b;
}
}
for (i = 0; i < n; i++) printf("%d ", a[i]);
return 0;
}
实验7-1-11-维数组/嵌套循环 求整数序列中出现次数最多的数
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4
#include<stdio.h>
int main(void) {
int n, a, j, max = 0, t;
scanf("%d", &n);
int num[1000];
int i;
for (i = 0; i < n; i++) scanf("%d", &num[i]);
for (i = 0; i < n; i++) {
a = 1;
for (j = 0; j < n; j++) {
if (num[i] == num[j]) {
a++;
}
}
if (max < a) max = a, t = i;
}
printf("%d %d", num[t], max - 1);
return 0;
}
实验7-1-12-一维数组 组个最小数
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
输入在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558
#include<stdio.h>
int main() {
int a[10];
int i, j, temp;
for (i = 0; i < 10; i++) scanf("%d", &a[i]);
for (i = 1; i < 10; i++) {
if (a[i] != 0) {
printf("%d", i);
temp = i;
break;
}
}
for (i = 0; i < 10; i++) {
if (i == temp) a[i] = a[i] - 1;
for (j = 0; j < a[i]; j++) {
printf("%d", i);
}
}
return 0;
}
实验7-1-13-一维数组/贪心算法 装箱问题
假设有N项物品,大小分别为
s
1
、
s
2
、
.
.
.
、
s
i
、
.
.
.
、
s
N
s_1、s_2、...、s_i、...、s_N
s1、s2、...、si、...、sN ,其中
s
i
s_i
si为满足
1
⩽
s
i
⩽
100
1 \leqslant s_i \leqslant 100
1⩽si⩽100的整数。要把这些物品装入到容量为100的一批箱子(序号1-N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。
输入格式:
输入第一行给出物品个数N(≤1000);第二行给出N个正整数
s
i
s_i
si(
1
⩽
s
i
⩽
100
1 \leqslant s_i \leqslant 100
1⩽si⩽100),表示第i项物品的大小)。
输出格式:
按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。
输入样例:
8
60 70 80 90 30 40 10 20
输出样例:
60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5
#include<stdio.h>
int main() {
int s[1000];
int n, i, j, t = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)scanf("%d", &s[i]);
int a[1000][2];
for (i = 0; i < n; i++) a[i][0] = 0;
for (i = 0; i < n; i++) a[i][1] = i + 1;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (a[j][0] + s[i] <= 100) {
printf("%d %d\n", s[i], a[j][1]);
a[j][0] = a[j][0] + s[i];
if (j >= t) t = j;
break;
}
}
}
printf("%d", a[t][1]);
return 0;
}
说明:这题代码写得很丑也很乱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)