GDPU C语言 天码行空7

1. 数组最大值交换

GDPU C语言 天码行空7_第1张图片
⭐ 1e9:10的9次方

#include

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_第2张图片
⭐ 状态数组:记录每一位同学是否 有旗帜
⭐ 循环:取模就好,特判一下 n

#include

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 枚举报数的值,枚举到n
			idx++;
			while (st[idx%n] != 'x')//非 x 表示已有旗出列啦
				idx++;//跳过这位同学
		}
		if (idx == n)// n % n == 0; 特殊处理一下 第 n 位同学的情况
			st[idx] = w[i];
		else
			st[idx%n] = w[i];

	}

	for (i = 1; i <= n; i++){
		if (st[i] != 'x')
			printf("%d %c\n", i, st[i]);
	}

	return 0;
}

2. 统计数字字符个数

在这里插入图片描述
⭐ 0 的 ACSCII值是 48

#include

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_第3张图片

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

#include

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_第4张图片
⭐ 师说:不能改原来代码,好啊
① 先看变量,只要 count 计数
② 填代码处【1】: a[i][j] != num 表示有效值(未删),说明 count 记录的是有效值
③ 填代码处【2】:按行输出,输出个数小于 count 即可

#include 

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 

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_第5张图片
GDPU C语言 天码行空7_第6张图片
碰撞双指针 + (代码规范)
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_第7张图片


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

a[i++] = x%10

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

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

你可能感兴趣的:(大学水课,c语言,算法,c++)