题目描述:给出一个包含n
个整数的数列,问整数a
在数列中的第一次出现的位置是多少(从1开始)
#include<stdio.h> int main(void) { /*********Begin*********/ int a[1000]; int i, n, b, p; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } scanf("%d", &b); for (i = 0; i < n; i++) { if (a[i] == b) { p = i + 1; break; } } if (n == i) printf("-1"); else printf("%d", p); /*********End**********/ return 0; }
本关任务:在网络传递数据过程中为安全考虑要为数据进行加密 ,假定数据是四位的整数,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。用户输入一个四位的整数,输出加密后的密文
#include <stdio.h> int main() { /*********begin *******/ int a[5], i, j, m, n; scanf("%d", &m); for (i = 0; i <= 3; i++) { a[i] = m % 10; //分离四个数 m = m / 10; a[i] = (a[i] + 5) % 10; } n = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]; printf("%d", n); /*********end *******/ return 0; }
本关任务:将十个数进行从大到小的顺序进行排列
#include<stdio.h> int main(void) { /*********Begin*********/ int a[100], i, j, t; for (i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (i = 0; i < 9; i++) { //最后一位在第9位已经比完了 for (j = 0; j < 9; j++) { if (a[j] < a[j + 1]) { t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; } } } for (i = 0; i < 10; i++) { printf("%d", a[i]); } /*********End**********/ return 0; }
输入 输入包括3
行,第一行为整数n
(元素个数),第二行包括n
个整数(数组元素),以空格分隔,第三行为整数m
(要查找的元素)。
输出 如果能够在序列中找到整数m
,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None
。
#include<stdio.h> int main() { int a[100], key, index = -1, high, low, mid, i, m; scanf("%d", &m); for (i = 0; i < m; i++) { scanf("%d", &a[i]); } scanf("%d", &key); low = 0; high = key-1; while (low <= high) { //目的是防止数组中没有查找的元素,如果没有需要的元素最终low会大于high mid = (low + high) / 2; if (a[mid] == key) { index = mid; break; } else if (a[mid] <= key) { low = mid + 1; //因为mid已经比较过所以+1 } else if (a[mid] > key) { high = mid - 1; //同上 } else { index = -1; break; } } if (index == -1) { printf("NULL"); } else printf("%d", index); return 0; }
参考
懒猫老师-C语言-二分查找(折半查找)_哔哩哔哩_bilibili
C语言二分查找法 - 尼古拉斯宝莉 - 博客园 (cnblogs.com)
题目描述:按如下函数原型编程从键盘输入一个m
行n
列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中m
和n
的值由用户键盘输入。已知m
和n
的值都不超过10
#include<stdio.h> int main(void) { /*********Begin*********/ int a[10][10], m, n, max, i, j, maxi = 0, maxj = 0; printf("Input m, n:"); scanf("%d,%d", &m, &n); printf("Input %d*%d array:\n", m, n); for (i = 0; i < m; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); max = a[0][0]; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) if (a[i][j] > max) { max = a[i][j]; maxi = i; maxj = j; } } printf("max=%d, row=%d, col=%d", max, maxi + 1, maxj + 1); /*********End**********/ return 0; }
题目描述:找出具有m
行n
列二维数组Array
的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10
#include<stdio.h> int main(void) { /*********Begin*********/ int a[10][10], m, n, i, j, k, max, min, flag = 1; scanf("%d%d", &m, &n); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) scanf("%d", &a[i][j]); } for (i = 0; i < m; i++) { max = a[i][0]; //比较行 k = 0; for (j = 1; j < n; j++) if (a[i][j] > max) { max = a[i][j]; k = j; } min = a[0][k]; //比较列 for (j = 1; j < m; j++) if (a[j][k] < min) min = a[j][k]; if (max == min) { printf("Array[%d][%d]=%d", i, k, max); flag += 1; } } if (flag == 0)printf("None"); /*********End**********/ return 0; }
题目描述:输入10
个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组
#include<stdio.h> #define m 10 //定义m=10 int main(void) { int a[m], n, b, max; for (n = 0; n < 10; n++) { scanf("%d", &a[n]); } max = a[0]; for (n = 0; n < 10; n++) { if (max < a[n]) { max = a[n]; } } for (n = 0; n < 10; n++) { if (a[n] == max) { if (n == 9) { break; } for (b = n; b < 9; b++) { a[b] = a[b + 1]; //将最大值移到最后 } break; } } for (b = 0; b < 9; b++) { printf("%d ", a[b]); //最后一个值不输出 } return 0; }
杨辉三角是一个无限对称的数字金字塔,从顶部的单个1开始,下面一行中的每个数字都是上面两个数字的和
#include<stdio.h> int main(void) { /*********Begin*********/ int a[10][10], i, j; for (i = 0; i < 10; i++) a[i][0] = a[i][i] = 1; for (i = 2; i < 10; i++) for (j = 1; j < i; j++) a[i][j] = a[i - 1][j] + a[i - 1][j - 1]; for (i = 0; i < 10; i++) { for (j = 0; j <= i; j++) printf("%4d", a[i][j]); //%4d意思是空格加数字 printf("\n"); } /*********End**********/ return 0; }
本关任务:有100盏灯,编号为1~100,分别有100个开关进行控制,开始时灯全是打开的,然后进行如下的操作:首先将编号凡是1的倍数的开关进行反向操作,然后再将是2的倍数的开关进行反向操作,依次类推直到最后对100的倍数的开关进行反向操作。求最后熄灭状态的灯的编号及总数
//当时抄的还没搞懂 #include "stdio.h" void main() { /************Begin************/ int a[101], i, lamp, count = 0; for (lamp = 0; lamp <= 100; lamp++) { a[lamp] = 0; } for (i = 1; i <= 100; i++) { for (lamp = i; lamp <= 100; lamp += i) { a[lamp]++; } } printf("熄灭状态的灯的编号是:\n"); for (i = 1; i <= 100; i++) { if (a[i] % 2 == 1) { printf("%4d", i); count++; } } printf("\n共有%d盏灯是灭的", count); /************End************/ }
本关任务:青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分
#include<stdio.h> int main() { double n, a[100], max, min, sum; int i; while (~scanf("%lf", &n)) //意思是从键盘一直输入 { if (n == 0)break; sum = 0; for (i = 0; i < n; i++) scanf("%lf", &a[i]); max = a[0]; min = a[0]; for (i = 0; i < n; i++) { if (max < a[i]) max = a[i]; if (min > a[i]) min = a[i]; } for (i = 0; i < n; i++) if (a[i] != max && a[i] != min) sum += a[i]; printf("%.2lf\n", sum / (n - 2)); } return 0; }