洛谷刷题C语言:工艺品制作、蛇形方阵、杨辉三角、自动修正、文字处理软件

记录洛谷刷题QAQ


一、【深基5.例7】工艺品制作

题目描述

现有一个长宽高分别为 w , x , h w,x,h w,x,h 组成的实心玻璃立方体,可以认为是由 1 × 1 × 1 1\times1\times1 1×1×1 的数个小方块组成的,每个小方块都有一个坐标 $ ( i,j,k ) $。现在需要进行 q q q 次切割。每次切割给出 ( x 1 , y 1 , z 1 ) , ( x 2 , y 2 , z 2 ) (x_1,y_1,z_1),(x_2,y_2,z_2) (x1,y1,z1),(x2,y2,z2) 这 6 个参数,保证 x 1 ≤ x 2 x_1\le x_2 x1x2 y 1 ≤ y 2 y_1\le y_2 y1y2 z 1 ≤ z 2 z_1\le z_2 z1z2;每次切割时,使用激光工具切出一个立方体空洞,空洞的壁平行于立方体的面,空洞的对角点就是给出的切割参数的两个点。

换句话说,所有满足 x 1 ≤ i ≤ x 2 x_1\le i\le x_2 x1ix2,$y_1\le j \le y_2 , , z_1\le k\le z_2$ 的小方块 ( i , j , k ) (i,j,k) (i,j,k) 的点都会被激光蒸发。例如有一个 4 × 4 × 4 4\times4\times 4 4×4×4 的大方块,其体积为 64 64 64;给出参数 ( 1 , 1 , 1 ) , ( 2 , 2 , 2 ) (1,1,1),(2,2,2) (1,1,1),(2,2,2) 时,中间的 8 8 8 块小方块就会被蒸发,剩下 56 56 56 个小方块。现在想知道经过所有切割操作后,剩下的工艺品还剩下多少格小方块的体积?

输入格式

第一行三个正整数 w , x , h w,x,h w,x,h

第二行一个正整数 q q q

接下来 q q q 行,每行六个整数 ( x 1 , y 1 , z 1 ) , ( x 2 , y 2 , z 2 ) (x_1,y_1,z_1),(x_2,y_2,z_2) (x1,y1,z1),(x2,y2,z2)

输出格式

输出一个整数表示答案。

样例 #1

样例输入 #1

4 4 4
1
1 1 1 2 2 2

样例输出 #1

56

提示

数据保证, 1 ≤ w , x , h ≤ 20 1\le w,x,h\le 20 1w,x,h20 1 ≤ q ≤ 100 1 \leq q\le 100 1q100 1 ≤ x 1 ≤ x 2 ≤ w 1 \leq x_1 \leq x_2 \leq w 1x1x2w 1 ≤ y 1 ≤ y 2 ≤ x 1 \leq y_1\leq y_2 \leq x 1y1y2x 1 ≤ z 1 ≤ z 2 ≤ h 1 \leq z_1 \leq z_2 \leq h 1z1z2h

代码如下

#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
 
 
int main()
{
	int w,x ,y;
	scanf("%d%d%d",&w,&x,&y);
	int num[w+1][x+1][y+1];
	for(int i = 1;i <= w;i++)
	{
		for(int j = 1;j <= x;j++)
		{
			for(int t = 1;t <= y;t++)
			{
				num[i][j][t] = 1;
			}
		}
	}
	int q;
	scanf("%d",&q);
	long long sum = w*x*y;
	for(int i = 1;i <= q;i++)
	{
		int x1,x2,x3,y1,y2,y3;
		scanf("%d%d%d%d%d%d",&x1,&x2,&x3,&y1,&y2,&y3);
	
		for(int a = x1;a<= y1;a++)
		{
			for(int b= x2;b <= y2;b++)
			{
				for(int c = x3;c <= y3;c++)
				{
					if(num[a][b][c] == 1)
					{
						num[a][b][c] = 0;
						sum --;
					} 
				}
			}
		}
	}
	

	
	printf("%lld\n",sum);
	return 0;
}

二、【深基5.习6】蛇形方阵

题目描述

给出一个不大于 9 9 9 的正整数 n n n,输出 n × n n\times n n×n
的蛇形方阵。

从左上角填上 1 1 1 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 3 3 3 个字符,前面使用空格补齐。

输入格式

输入一个正整数 n n n,含义如题所述。

输出格式

输出符合题目要求的蛇形矩阵。

样例 #1

样例输入 #1

4

样例输出 #1

1  2  3  4
 12 13 14  5
 11 16 15  6
 10  9  8  7

提示

数据保证, 1 ≤ n ≤ 9 1 \leq n \leq 9 1n9

代码如下

#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
int num = 1, a[12][12];
int main() {
	int n;
	scanf("%d",&n);
	int t = ceil(1.0 * n / 2);根据推导总结,转的圈数为行数除以2,如果行数是奇数还要+1,其实就是ceil。
	for(int i=0; i<t; i++) {
		for (int j = i; j < n - i; j++) {
            a[i][j] = num++;//每一圈判断第一行
        }
        for (int j = i + 1; j < n - i - 1; j++) {
            a[j][n - i - 1] = num++;//每一圈判断最后一列
        }
        for (int j = n - i - 1; j > i; j--) {
            a[n - i - 1][j] = num++;//判断每一圈最后一行
        }
        for (int j = n - i - 1; j > i; j--)  {
            a[j][i] = num++;//判断每一圈第一列
        }
	}
	for(int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			printf("%3d", a[i][j]);//输出方式要注意,%3d
		}
		printf("\n");
	}
	return 0;
} 

三、【深基5.习7】杨辉三角

题目描述

给出 n ( n ≤ 20 ) n(n\le20) n(n20),输出杨辉三角的前 n n n 行。

如果你不知道什么是杨辉三角,可以观察样例找找规律。

输入格式

输出格式

样例 #1

样例输入 #1

6

样例输出 #1

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

代码如下

#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>

int a[21][21];
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		a[i][1]=a[i][i]=1;//赋初值
	for(int i=1;i<=n;i++)
		for(int j=2;j<i;j++)//因为a[i][1]、a[i][i]已经赋值过了,所以循环是2~n-1
			a[i][j]=a[i-1][j]+a[i-1][j-1];
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
}

四、【深基6.例1】自动修正

题目描述

大家都知道一些办公软件有自动将字母转换为大写的功能。输入一个长度不超过 100 100 100 且不包括空格的字符串。要求将该字符串中的所有小写字母变成大写字母并输出。

输入格式

输入一行,一个字符串。

输出格式

输出一个字符串,即将原字符串中的所有小写字母转化为大写字母。

样例 #1

样例输入 #1

Luogu4!

样例输出 #1

LUOGU4!

代码如下

#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>

int main()
{
	char num[101];
	scanf("%s",&num);
	
	int len = strlen(num);
	for(int i = 0;i < len;i++)
	{
		if(num[i] >= 'a'&&num[i] <= 'z')
		{
			char n = (char)((int)num[i] - 32);
			printf("%c",n);
		}
		else 
		{
			printf("%c",num[i]);
		}
	}
	return 0;
}

五、【深基6.例6】文字处理软件

题目描述

你需要开发一款文字处理软件。最开始时输入一个字符串作为初始文档。可以认为文档开头是第 0 0 0 个字符。需要支持以下操作:

  • 1 str:后接插入,在文档后面插入字符串 str \texttt{str} str,并输出文档的字符串。

  • 2 a b:截取文档部分,只保留文档中从第 a a a 个字符起 b b b 个字符,并输出文档的字符串。

  • 3 a str:插入片段,在文档中第 a a a 个字符前面插入字符串 str \texttt{str} str,并输出文档的字符串。

  • 4 str:查找子串,查找字符串 str \texttt{str} str 在文档中最先的位置并输出;如果找不到输出 − 1 -1 1

为了简化问题,规定初始的文档和每次操作中的 str \texttt{str} str 都不含有空格或换行。最多会有 q q q 次操作。

输入格式

第一行输入一个正整数 q q q,表示操作次数。

第二行输入一个字符串 str \texttt{str} str,表示最开始的字符串。

第三行开始,往下 q q q 行,每行表示一个操作,操作如题目描述所示。

输出格式

一共输出 n n n 行。

对于每个操作 1 , 2 , 3 1,2,3 1,2,3,根据操作的要求输出一个字符串。

对于操作 4 4 4,根据操作的要求输出一个整数。

样例 #1

样例输入 #1

4
ILove
1 Luogu
2 5 5
3 3 guGugu
4 gu

样例输出 #1

ILoveLuogu
Luogu
LuoguGugugu
3

提示

数据保证, 1 ≤ q ≤ 100 1 \leq q\le 100 1q100,开始的字符串长度 ≤ 100 \leq 100 100

代码如下

#include<string.h>
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#define MAXN 101


int main()
{
	char s[MAXN],in[MAXN];
	int n;
	scanf("%d\n%s",&n,s);
	for(int i=1;i<=n;i++){
		int opt;
		scanf("%d",&opt);
		if(opt==1){
			scanf("%s",in);
			strcat(s,in);
			printf("%s\n",s);
		}else if(opt==2){
			int a,b;
			scanf("%d %d",&a,&b);
			s[a+b]='\0';
			strcpy(in,&s[a]);
			strcpy(s,in);
			printf("%s\n",s);
		}else if(opt==3){
			int a;
			scanf("%d %s",&a,in);
			strcat(in,&s[a]);
			s[a]='\0';
			strcat(s,in);
			printf("%s\n",s);
		}else{
			scanf("%s",in);
			char*ans=strstr(s,in);
			if(ans!=NULL){
				printf("%d\n",(int)(ans-s));
			}else{
				printf("%d\n",-1);
			}
		}
	}
	return 0;
}

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
5月12日发布完美版 这次发布的PCtoLCD2002完美版与前一版本相比没有增加太多的功能,因为我觉得现有的这些功能已经足够用于生成各种字模的需要了,所以完美版的主要工作是反复测试,精心去除各种BUG,以及调节一些细微之处,目的当然就是追求完美!不过世上不会有真正完美的东西,这个软件也不例外,而且这个软件从头至尾全部是我一个人编写完成,精力有限,难免会顾此失彼,如果大家发现了这个版本中存在的BUG,请及时告诉我。 更新说明: 1。界面采用新的字体,不会再有那种难看的黑色粗体字,比以前的要漂亮多了。 2。加入全面的提示帮助,尽量减少普通用户的各种疑惑。 3。修正生成文件的扩展名的一些BUG,不会总是加上FON的扩展名了。 4。修正生成字模数据的一些格式BUG,现在生成的C51格式字模数据基本上可以直接粘贴到源程序中使用而不需要修改了 5。加入新的字模数据格式调整项,允许用户更自由的定制自己需要的数据格式 6。最重要的更新:全面支持保存当前设置功能,用户设置的字模格式,主窗口状态和字库生成窗口选项信息均可保存,下一次打开窗口时不用重新设置。 7。修正了新建图象时会自动跳到图形模式的BUG 8。增加输出紧凑格式数据选项,可以生成不包含空白行的字模数据。 9。完善了每行数据显示个数的功能,可以任意设置每行显示的数据个数,并同时可以设置每行索引数据显示个数。 10。修正了取模说明的一些错误,并改动了格式。 11。现在当用户选择10进制输出时,会自动去掉生成字模数据前的“0x",或后面的“H”,选择16进制时则会自动加上。 12。对各个窗体重新设计以全面适应最大化的需要,如果您觉得当前窗口不够大,可以最大化使用。 13。增加生成英文点阵字库功能,可自动生成ASCII码从0-127的任意点阵字库,使用方法同生成国标点阵字库功能。 14。再次优化代码,去掉各种调试信息,使程序速度再快一些。 15。还有许多细微的调整我记不清了…… 需要注意的地方: 在测试的过程中我发现了一个问题:在WIN98或WINME下当用户直接生成特大点阵的字模时(例如320*320,1024*768的汉字字模),此时由于数据量非常庞大,而WIN98/WINME会有64K的数据容量限制,所以在主窗口中是无法得到全部的字模数据的,这时您需要使用字库生成功能,通过形成一个数据文件才能得到完整的字模数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值