当前位置: 代码迷 >> 综合 >> XTU 1403 菱形 求找错wwwww
  详细解决方案

XTU 1403 菱形 求找错wwwww

热度:76   发布时间:2023-12-04 21:32:04.0

菱形 I

[ Submit Code ] [ Top 20 Runs ] [ Runs Status ]
Acceteped : 17 Submit : 45
Time Limit : 1000 MS Memory Limit : 65536 KB

Description

菱形

题目描述

按照给定小菱形的数量n,利用字符打印菱形,要求

  1. 只使用/\,空格,回车四种字符。
  2. 行首无多余的空格,行末无空格。
  3. 菱形从上到下,从左到右,依次编码,从1到n,不要输出多余的菱形。
  4. 边长为a的大菱形,最少有(a?1)2+1个小菱形,最多有a2个小菱形。

具体格式见样例。

比如边长为3的菱形,最少有5个小菱形(左边的情况),最多有9个小菱形(右边的情况)。

   /\      /\/\/\    /\/\/\/\/   /\/\/\\/\/    \/\/\/\/\/\/

对应的编号分别为

  1     12 3   2 3
4 5   4 5 67 89

输入格式

存在多个样例,每个样例是一个整数n(1≤n≤100)。如果n为0,表示输入结束,这个样例不需要处理。

输出格式

依次按要求输出对应数量的菱形。

样例输入

1
2
3
4
5
6
7
0

样例输出

/\
\//\
/\/
\//\
/\/\
\/\//\
/\/\
\/\/\//\/\/\
/\/\/
\/\//\/\/\
/\/\/\
\/\/\//\/\/\
/\/\/\
\/\/\/\/

思路很垃圾....但是不知道错哪里了,找了AC代码打印1-100文件比对也完全一致.... 


#include<stdio.h>
#include<math.h>
#include<string.h>
char a[60][60];
void solve(int n) {if(n == 0) return;int flag;
//    while(scanf("%d",&n)&&n!=0){double temp=sqrt(n);int p;p=int(temp); if(p!=temp) p+=1; //边长;int h=(p+1)*p/2;if(n<=h) flag=1;else     flag=0;//要搞下一半 int abc=1,cnt2=0,cnt=0;int line=p+1;int cun=n;while(n-h>0){n-=p;cnt2++;n+=cnt2;}line+=cnt2;for(int i=0;i<11;i++){for(int j=0;j<=i;j++){a[0+i][p+0-i+j*2]='/';a[0+i][p+1-i+j*2]=92; for(int s=p+1-i+j*2;s<=45;s++){if(a[0+i][s]==' '){a[0+i][s]='\0';break;}         }a[1+i][p+0-i+j*2]=92;a[1+i][p+1-i+j*2]='/';     for(int s=p+2-i+j*2;s<=45;s++){if(a[1+i][s]==' '){a[1+i][s]='\0'; break;}    }cnt++;if(cnt==cun||cnt==h){abc=0;break;}}if(abc==0)    break;} //上一半;    int move=0,sum=0;    if(flag==0){for(int i=p+1;i<=line;i++){move++;cnt=0;for(int j=0;j<=33;j++){a[i][1+j*2+move]=92;a[i][2+j*2+move]='/';cnt++;sum++;if(cnt==p-1||sum==cun-h){p-=1;a[i][3+j*2+move]='\0';//结束符设置break;}    }    if(sum==cun-h) break;}}//后半部分; for(int i=0;i<line;i++){
//            for(int j=1;j<=50;j++){
//                printf("%c",a[i][j]);
//            }printf("%s\n", a[i] + 1);}
//        for(int i=0;i<=cun;i++){
//            for(int j=1;j<=45;j++)    a[i][j]=' ';
//        }memset(a,' ',sizeof(a));//输出和清零。 
//    }
} 
int main()
{    int x;while(scanf("%d", &x) != EOF && x != 0) solve(x);
//    freopen("a.out", "w", stdout); 
//    for(int i = 1; i <= 100; ++ i) printf("%d\n", i), solve(i);return 0; }