当前位置: 首页 > article >正文

GDPU C语言 天码行空7

1. 数组最大值交换

在这里插入图片描述
⭐ 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. 围圈报数

在这里插入图片描述
⭐ 状态数组:记录每一位同学是否 有旗帜
⭐ 循环:取模就好,特判一下 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 枚举报数的值,枚举到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<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 . 求鞍点

在这里插入图片描述

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

#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. 二维数组删除指定值的元素

在这里插入图片描述
⭐ 师说:不能改原来代码,好啊
① 先看变量,只要 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. 回文数组

在这里插入图片描述
在这里插入图片描述
🤠 碰撞双指针 + (代码规范)
😋 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. 判断回文数

在这里插入图片描述


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

a[i++] = x%10

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

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

http://www.kler.cn/a/9950.html

相关文章:

  • leetcode hot100【LeetCode 114.二叉树展开为链表】java实现
  • 《情商》提升:增强自我意识,学会与情绪共处
  • Unity3D
  • Java 堆内存管理详解:`-Xms` 和 `-Xmx` 参数的使用与默认内存设置
  • linux 下查看程序启动的目录
  • 程序员年薪百万秘籍(一)
  • 代码随想录算法训练营第五十五天 | 392. 判断子序列、115. 不同的子序列
  • 【grafana】使用多级变量解决Granfana模板变量中的大小限制
  • RHCE——shell脚本练习
  • DC 使用记录
  • 一次性搞懂dBSPL、dBm、dBu、dBV、dBFS的区别!
  • 谈ChatGPT基本信息
  • Mac平台上有哪些好用的常用软件?
  • 软件重构方法
  • Nacos 性能报告
  • 2023-04-14 lua + C动态库交叉debug
  • 逆向入门--何为OEP
  • 故障注入的方法与工具
  • 【GITLab】docker部署GitLab
  • 如何在ubuntu上搭建minio
  • 灌区量测水系统
  • C++ Primer第五版_第十一章习题答案(31~38)
  • 程序员必用的6个代码对比神器附下载地址
  • Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等
  • NumPy 初学者指南中文第三版:1~5
  • 【三十天精通Vue 3】 第三天 Vue 3的组件详解