• 洛谷刷题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
    • 2
    • 3

    样例输出 #1

    56
    
    • 1

    提示

    数据保证, 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
    #include
    #include
    #include 
     
     
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    二、【深基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

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

    提示

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

    代码如下

    #include
    #include
    #include
    #include 
    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;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

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

    题目描述

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

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

    输入格式

    输出格式

    样例 #1

    样例输入 #1

    6
    
    • 1

    样例输出 #1

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

    代码如下

    #include
    #include
    #include
    #include 
    
    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");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

    题目描述

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

    输入格式

    输入一行,一个字符串。

    输出格式

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

    样例 #1

    样例输入 #1

    Luogu4!
    
    • 1

    样例输出 #1

    LUOGU4!
    
    • 1

    代码如下

    #include
    #include
    #include
    #include 
    
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    五、【深基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
    • 2
    • 3
    • 4
    • 5
    • 6

    样例输出 #1

    ILoveLuogu
    Luogu
    LuoguGugugu
    3
    
    • 1
    • 2
    • 3
    • 4

    提示

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

    代码如下

    #include
    #include
    #include
    #include 
    #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;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    MinGW 32bit构建Curl with Openssl流程
    【FFMPEG】Windows下将ffmpeg编译成lib和dll完整教程
    二叉搜索树
    Allegro如何设置丝印位号优先显示操作指导
    图像处理ASIC设计方法 笔记10 插值算法的流水线架构
    使用小程序制作一个音乐播放器
    2022牛客暑期多校训练营3(总结+补题)
    glTexImage2D
    【新手上路常见问答】R和Python在数据科学的应用比较
    SpringCloud——什么是微服务
  • 原文地址:https://blog.csdn.net/weixin_62529383/article/details/126067385