> 文章列表 > GDPU C语言 天码行空7

GDPU C语言 天码行空7

GDPU C语言 天码行空7

1. 数组最大值交换

GDPU C语言 天码行空7
⭐ 1e9:10的9次方

#include<stdio.h>int main()
{int n, i,idx = 0;//idx 记录第一个出现的最大值下标scanf("%d", &n);double a[30];double max = -1e9;// 1e9 表示10的9次方,十亿,int 的最大范围级别for (i = 0; i < n; i++){scanf("%lf", &a[i]);if (a[i] > max){idx = i;max = a[i];}}int tmp = a[0];a[0] = a[idx];a[idx] = tmp;for (i = 0; i < n; i++)printf("%lf  ", a[i]);return 0;
}

6. 围圈报数

GDPU C语言 天码行空7
⭐ 状态数组:记录每一位同学是否 有旗帜
⭐ 循环:取模就好,特判一下 n

#include<stdio.h>int main()
{int n, m, i,j;scanf("%d %d", &n, &m);char w[10]= { '1', 'l', 'e', 'v', 'e', 'l', '1' };char st[1000];//状态数组,表示每个学生的状态for (i = 0; i < 1000; i++)st[i] = 'x';//初始化位 x 表示无旗int idx = 0;//表示当前报数的同学的数组下标for (i = 0; i < 7; i++){// i 表示的是第 i 面旗帜for (j = 1; j <= m; j++){// j 枚举报数的值,枚举到nidx++;while (st[idx%n] != 'x')//非 x 表示已有旗出列啦idx++;//跳过这位同学}if (idx == n)// n % n == 0; 特殊处理一下 第 n 位同学的情况st[idx] = w[i];elsest[idx%n] = w[i];}for (i = 1; i <= n; i++){if (st[i] != 'x')printf("%d %c\\n", i, st[i]);}return 0;
}

2. 统计数字字符个数

GDPU C语言 天码行空7
⭐ 0 的 ACSCII值是 48

#include<stdio.h>int main()
{int cnt = 0;char c;int flag = 0;//出现是否第一个 # while (1)//写个死循环{scanf("%c", &c);if (c == '#'){if (flag)break;//两个 # 结束flag = 1;}else{flag = 0;//清掉第一个 #if (c >= '0' && c <= '9')cnt++;}}printf("sum=%d", cnt);return 0;
}

3 . 求鞍点

GDPU C语言 天码行空7

⭐ 鞍点:是指该位置上的元素值在该行上最大、在该列上最小。

#include<stdio.h>int main()
{int a[7][7];int max[7], min[7];//max 记录第 i 行的最大值,min记录第 j 列的最小值int i, j, n;for(i = 0; i < 7; i++){max[i] = -1e9;min[i] = 1e9;}scanf("%d", &n);for(i = 0; i < n; i++){for(j = 0; j < n; j++){scanf("%d", &a[i][j]);if(a[i][j] > max[i])max[i] = a[i][j];if(a[i][j] < min[j])min[j] = a[i][j];}}for(i = 0; i < n; i++){for(j = 0; j < n; j++){if(a[i][j] == max[i] && a[i][j] == min[j]){printf("a(%d,%d)=%d", i, j, a[i][j]);return 0;}}}printf("NO");return 0;
}

4. 二维数组删除指定值的元素

GDPU C语言 天码行空7
⭐ 师说:不能改原来代码,好啊
① 先看变量,只要 count 计数
② 填代码处【1】: a[i][j] != num 表示有效值(未删),说明 count 记录的是有效值
③ 填代码处【2】:按行输出,输出个数小于 count 即可

#include <stdio.h>int main(){int i, j, count = 0, num;int a[5][5] = { { 1, 2, 3, 4, 5 }, { 2, 3, 4, 5, 6 }, { 3, 4, 5, 6, 7 }, { 0, 1, 2, 3, 4 }, { 6, 7, 8, 9, 0 } };scanf("%d", &num);for(i = 0; i<5; i++)for(j = 0; j<5; j++)if(a[i][j] != num){//【1】//请填入一行或多行代码a[count/5][count%5] = a[i][j];count++;//count记录有效值个数}for(i = 0; i<5; i++){//输出//【2】//请填入一行或多行代码for(j = 0; j < 5; j++){if(i * 5 + j + 1 == count)//输出完有效数字后直接结束程序(数组下标从 0 开始,判断时得 +1 )return 0;printf("%3d", a[i][j]);}printf("\\n");}return 0;
}

5. 小猴修仙

⭐ 特判滑到地面的情况即可

#include <stdio.h>int main() {int k, n,i;scanf("%d%d", &k, &n);int h = 0;//记录小猴现在的高度for(i = 0; i < n; i++) {int m, p;scanf("%d%d", &m, &p);h += m;//白天 上爬if(h >= k)//只要爬到了 k 就成功了,收工 {printf("YES\\n");return 0;}h -= p;//晚上 下滑if(h < 0)//最次就是滑倒地面,不存在打入地府h = 0;}printf("NO\\n");return 0;
}

程序片段编程题

1. 回文数组

GDPU C语言 天码行空7
GDPU C语言 天码行空7
🤠 碰撞双指针 + (代码规范)
😋 ans 记录结果,left right 表示作用向中间移动的下标(指针),flag 记录是否有解


⭐ 代码片段1
🐷 方式1:简单粗暴,出结果直接结束程序(OI 首选)

printf("%d", ans);
return 0;

🐷 方式2:统一结果(结果统一在最后输出,flag记录是否有解)(便于后期维护调试)

flag = 1;
break;

⭐ 代码片段2
🐷 合并了就跳过 1 个就好啦

a[left + 1] += a[left];
left++;
ans++;

2. 判断回文数

GDPU C语言 天码行空7


🤠 代码片段1
⭐ 每次取出 x 的最低位

a[i++] = x%10

🤠 代码片段2
⭐ 数组的起点是 0,终点是 i-1, p是从两端向中间的偏移量

a[0 + p] != a[i-1 - p]