强化阶段 Day 4 算法笔记 3.3 图形输出

目录

1.跟奥巴马一起编程

2.打印沙漏

3.Hello World for U


1.跟奥巴马一起编程

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	int col;
	char c;
	scanf("%d %c",&col,&c);
	
	int row;
	if(col%2==1) row=col/2+1;
	else row=col/2;
	row-=2;
	
	for(int i=0;i<col;i++){
		printf("%c",c);
	}
	printf("\n");
	
	for(int i=0;i<row;i++){
		printf("%c",c);
		for(int j=0;j<col-2;j++){
			printf(" ");
		}
		printf("%c",c);
		printf("\n");
	}

	for(int i=0;i<col;i++){
		printf("%c",c);
	}
	
	return 0;
}

2.打印沙漏

我首先找出最上面一层的数量,然后一步步找规律输出,最后只能拿到20分的16分

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int getvalue(int x){
	for(int i=3;i<1000;i+=2){
		x-=2*i;
		if(x<0){
			return i-2;
		}
	}
	return -1;
}

int main(){
	
	int n;
	char c;
	scanf("%d %c",&n,&c);
	if(n==0) return 0;
	else if(n==1) printf("*");
	else{
		int max_=getvalue(n-1);
		if(max_==1){
			printf("*\n");
			printf("%d",n-1);
		}else{
			int gap=0,num=max_;
			int count=0;
			for(int i=max_;i>=1;i-=2){
				for(int j=0;j<gap;j++){
					printf(" ");
				}
				for(int j=0;j<i;j++){
					count++;
					printf("%c",c);
				}
				printf("\n");
				gap+=1;
			}
			gap-=2;
			for(int i=3;i<=num;i+=2){
				for(int j=0;j<gap;j++){
					printf(" ");
				}
				for(int j=0;j<i;j++){
					count++;
					printf("%c",c);
				}
				printf("\n");
				gap-=1;
			}
			printf("%d",n-count);
		}
	}
	return 0;
}

这种方法先通过数学方法算出来,更加科学

 

3.Hello World for U

strlen求数组长度大小

直接用数组存储最后的结果,输出数组即可

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

int main(){
	
	char str[100],martix[40][40];
	scanf("%s",str);
	
	int len=strlen(str);
	int n1=(len+2)/3,n3=n1,n2=len+2-n1-n3;
	
	for(int i=1;i<n1;i++){
		for(int j=1;j<n2;j++){
			martix[i][j] = ' ';
		}
	}
	int pos=0;
	for(int i=1;i<=n1;i++){
		martix[i][1] = str[pos++];
	}
	
	for(int i=2;i<=n2;i++){
		martix[n1][i] = str[pos++];
	}
	
	for(int i=n3-1;i>=1;i--){
		martix[i][n2] = str[pos++];
	}
	
	for(int i=1;i<=n1;i++){
		for(int j=1;j<=n2;j++){
			printf("%c",martix[i][j]);
		}
		printf("\n");
	}
	
	
	return 0;
}

 

おすすめ

転載: blog.csdn.net/aixiaoxiao13/article/details/121745851