zqz


私信TA

用户名:wxhnzll357159

访问量:11559

签 名:

心之所向,且随风而去

等  级
排  名 1147
经  验 3039
参赛次数 2
文章发表 6
年  龄 20
在职情况 学生
学  校 哔哩大学
专  业 计算机科学与技术

  自我简介:

TA的其他文章

解题思路:

利用字符数组来实现空格和X的的变换,其次找到打印规律。

注意事项:

注意一:题目输出的是X,而不是x,晃眼一看很容易写成小写,这样很不容易发现错误。


注意二:输入包含多组测试数据。第一个整数N(N<=15),N表示组数,每组数据包含两个整数a,b。这里说的多组数据并不是有多组N,a,b的意思,而是说多组数据是由N控制,它决定组数,没有多组的N,否则就会输出超限


注意三:单纯的输出一个完整的DNA形状较为简单,多个重复我们就需要找规律(这是题目的关键)我的发现如下图

QQ图片20210209180804.png

通过图示我们可以知道,每一组数据需要一个循环(S1)来走重复打印的次数,在S1内部我们需要一个循环S2来实现每一个S1所打印的行数,在S2中我们需要一个循环S3来实现每一行字符数组的打印,就是3重循环。


代码部分我们做的是最后单独打印最后一行。

参考代码:

#include<stdio.h>
int main()
{
    int N,a,b,j,k,i;
    scanf("%d",&N);
 char ch[40];//将字符数组全部初始化为空格,在需要打印哪一行时将对应的部分改为X,打印完成,又换回空格
 for(i=0;i<40;i++)
 ch[i]=' ';
 while(N--)//当全部组数打印完,跳出循环
 {
    scanf("%d %d",&a,&b);
    for(i=0;i<b;i++)//循环S1
    {
       for(k=0;k<a-1;k++)//循环S2
       {
         ch[k]=ch[a-k-1]='X';
         for(j=0;j<a;j++)循环S3
         printf("%c",ch[j]);
         printf("\n");
         ch[k]=ch[a-k-1]=' ';
       } 
   }
    ch[0]=ch[a-1]='X';//单独打印剩的那一行
    for(j=0;j<a;j++)
    printf("%c",ch[j]);
    printf("\n\n");
    ch[0]=ch[a-1]=' ';
   }
    return 0;
}

有问题的同学欢迎讨论,我们互相成长,一起变强!

 

0.0分

34 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

能说说最后一步是干什么的吗 ch[0]=ch[a-1]=' ';
2022-08-19 17:36:00
#include<stdio.h>

int main()
{
	char a[10][10];
	int n, k[15]={0}, m[15]={0};
	int i, j, w,q;
	scanf("%d",&n);
	for (i = 0; i <n; i++)
		scanf("%d%d",&k[i], &m[i]);
	for (q = 0; q < n; q++)
	{

		for (i = 0; i < k[0+q]; i++)
		{
			for (j = 0; j < k[0+q]; j++)
			{
				if (j == i || j == k[0+q] - 1 - i)
					a[i][j] = 'X';
				else
					a[i][j] = ' ';
			}
		}
		for (w = 0; w < m[0+q]; w++)
		{
			for (i = 0; i < k[0+q]; i++)
			{
				for (j = 0; j < k[0+q]; j++)
				{
					printf("%c", a[i][j]);
				}
				printf("\n");
			}
		}
		printf("\n");
	}
	return 0;
}
结果一样,为什么不对
2022-07-05 01:12:14
为什么不能从头开始循环,需要单独打印第一行
2022-01-14 13:58:51
#include<bits/stdc++.h>
using namespace std;
void p(int a,int b)//打印 一组dna要求 =核心重复+增加一行
{
    for(int k=1;k<=b;k++)//多组打印
    {
    int c=1,d=a;
    for(int j=1;j<=a-1;j++)
        {
                for(int i=1;i<=a;i++)//打印一行
            {
                if(i==c||i==d)
                cout<<"X";
                else
                cout<<" ";
            }
            cout<<endl;//打印完成一行后换行
            c++;
            d--;
        }
    }
    //尾部附加
    for(int i=1;i<=a;i++)
    if(i==1||i==a)
    cout<<"X";
    else
    cout<<" ";
    cout<<endl;//写完一组完整数据后要换行!
    cout<<endl;
    
    
}
2022-01-06 22:13:46
#include<stdio.h>
int main()
{
    int i,j,n;
    int s,d;
    int a[20],b[20];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&a[i],&b[i]);
    }
    for(i=0;i<n;i++)
    {
    	//打印第一行 
        for(j=0;j<a[i];j++)
        {
            if(j==0||j==a[i]-1)
             printf("X");
            else
            printf(" ");
        }
        printf("\n");
        //打印每个DNA循环部分 
        for(j=0;j<b[i];j++)
        { 
            for(d=1;d<=a[i]-1;d++)//行数 
            {
                for(s=1;s<=a[i];s++)//列数 
                {
                   if(s==d+1||s==a[i]-d)
2021-12-13 20:58:15
#include<stdio.h>
#define N 100
void f(int a,int b)
{
	int m=0;
	char P[N][N];
	for(int i=0;i<a;i++)       //1和b// 
	{
		for(int j=0;j<a;j++)
		{
			if(i==j||i+j==a-1)
			{
			    P[i][j]='X';	
			}else{
				P[i][j]=' ';
			}
		}
	}
	int flag=b;
	while(flag--)
	{
		if(flag==b-1)
		{
			for(int k=0;k<a;k++)
			{
				puts(P[k]);
			}
		}else{
			for(int l=1;l<a;l++)
			{
				puts(P[l]);
			}
		}
	}
}
int main()
{
	int n,a,b;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&a,&b);
		f(a,b);
		printf("\n");
	}
	return 0;
}
2021-11-29 15:16:06
大哥这不对吧,没判断a是不是奇数啊
2021-09-29 15:57:02
#include<stdio.h>
void output(int a,int b){
    char str[39][39]={" "};
    int c;
    c=(a+1)/2-1;
    str[c][c]='X';
    for(int i=1;i<=c;i++){
        str[c-i][c-i]='X';
        str[c-i][c+i]='X';
        str[c+i][c-i]='X';
        str[c+i][c+i]='X';
        }
        for(int i=0;i<a;i++){
            for(int j=0;j<a;j++){
                printf("%c",str[i][j]);

        }printf("\n");
    }
    for(int l=1;l<b;l++){
        for(int i=1;i<a;i++){
            for(int j=0;j<a;j++){
                printf("%c",str[i][j]);

        }printf("\n");
    }
    }


}
int main(){
    int n;
    while
2021-09-29 12:52:58