当前位置: 代码迷 >> C语言 >> [思考]输出X字样。
  详细解决方案

[思考]输出X字样。

热度:322   发布时间:2007-05-20 22:10:32.0
[思考]输出X字样。
有一道算法题:
输入一个整数 n
输出一个X字样。

比如:
输入 n = 1;
则输出结果为: X

输入 n = 2;
则输出结果为: X X
X
X X

输入 n = 3;
则输出结果为:X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
假设 n-1 对应的图形是 S,
则 n 对应的图形是
S S
S
S S
以此类推。。。
(要求用 printf 实现输出功能)

[此贴子已经被作者于2007-5-21 0:43:49编辑过]

搜索更多相关的解决方案: 字样  输出  思考  

----------------解决方案--------------------------------------------------------
printf实现输“入”?
----------------解决方案--------------------------------------------------------

错了,是“输出”,不好意思!


----------------解决方案--------------------------------------------------------
呵呵,,想像不出输入4是什么样子.找不出规律..

谁想到了说下啊..
----------------解决方案--------------------------------------------------------
输入4是这样:
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
以 n = 3 的图形为基础,
假设 n = 3 的图形是 S
n = 4 就会输出:
S S
S
S S
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <string.h>
int a[9]={ 0,0,1,3,9,27,81,243,729 };
char G[730][730];
void Copy(int N,int x,int y) {
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
G[x+i][y+j]=G[i][j];
}
int main()
{
int i,j,n,t;
memset(G,' ',sizeof(G));
G[0][0]='X';
for(i=2;i<8;i++) {
t=a[i];
Copy(t,0,2*t);
Copy(t,t,t);
Copy(t,2*t,0);
Copy(t,2*t,2*t);
}
while(scanf("%d",&n) && n!=-1) {
for(i=0;i<a[n+1];i++) {
for(j=0;j<a[n+1];j++)
printf("%c",G[i][j]);
printf("\n");
}
printf("-\n");
}
return 0;
}
----------------解决方案--------------------------------------------------------
呵呵~不错!
----------------解决方案--------------------------------------------------------
6楼写的不错
我当时用的是第归做的这个分行
----------------解决方案--------------------------------------------------------
回复:(herbert_1987)[思考]输出X字样。

#include <MATH.H>
#include <STDIO.H>
#include <CONIO.H>

void drawstar(int m);

void drawstar(int m)
{
int n=m;

if(n==1)
{
printf("*");

}
else
{
drawstar(n-1);
gotoxy(wherex()+pow(3,n-2),wherey()-pow(3,n-2)+1);
drawstar(n-1);

gotoxy(wherex()-2*pow(3,n-2),wherey()+1);
drawstar(n-1);

gotoxy(wherex()-2*pow(3,n-2),wherey()+1);
drawstar(n-1);

gotoxy(wherex()+pow(3,n-2),wherey()-pow(3,n-2)+1);
drawstar(n-1);
}

}
main()
{
int n;
printf("please input n=\n");
scanf("%d",&n);
if(n<1)
printf("input error");
else
drawstar(n);
}


我用递归法写的。 但是我不知道如何使输出的屏幕左右上下滚动。。所以输出行大于25时,结果就不对了。。。

[此贴子已经被作者于2007-5-21 15:07:36编辑过]


----------------解决方案--------------------------------------------------------
回复:9楼
我用的是VC,不能编译你的程序,不过看来也挺简捷的。

[此贴子已经被作者于2007-5-21 23:22:48编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案