菱形 I |
||
[ Submit Code ] [ Top 20 Runs ] [ Runs Status ] | ||
Acceteped : 17 | Submit : 45 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB | |
Description |
||
菱形?题目描述?按照给定小菱形的数量n,利用字符打印菱形,要求
具体格式见样例。 比如边长为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; }