| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1010 人关注过本帖
标题:一个图形的简单程序
只看楼主 加入收藏
ziyi555
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-11-4
收藏
 问题点数:0 回复次数:8 
一个图形的简单程序
HHHHHHHHH
HTTTTTTTH
HT11111TH
HT12221TH
HT12321TH
HT12221TH
HT11111TH
HTTTTTTTH
HHHHHHHHH
我会打空心星星,以为这个和那个差不多,但是做起来却太烦琐了,肯定是自己的方法不对。
而且还没设置输入N值的变量。这个图怎么打才能简单点 ??
要求外2圈是H和T里面的从1开始递增,并且要求输入N值 让边上符号的个数与N相等
搜索更多相关主题的帖子: 图形 变量 星星 符号 
2006-11-04 21:13
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 

winxp vc6.0平台 n 只能取大于等于3的整数 仅供参考
#include <stdio.h>
#define n 9
void main()
{
int i=0,j=0,k=1,c=72;
int a[n][n]={0};
while(1)

{
a[i][j] = c;
if (k==3) break;
if(i <= j && i+j <n-1) { j++; continue;}
if(i < j && i +j >= n-1 ) {i++;continue;}
if(i >= j && i+j >n-1) {j--;continue;}
if(i > j && i+j <= n-1 )
if(i - j== 1) {j++;k++;c=84;}else {i-- ;continue;}
}

while(1)
{
a[i][j] = k+46;
if (k==n/2+1) break;
if(i <= j && i+j <n-1) { j++; continue;}
if(i < j && i +j >= n-1 ) {i++;continue;}
if(i >= j && i+j >n-1) {j--;continue;}
if(i > j && i+j <= n-1 )
if(i - j== 1) {j++;k++;}else {i-- ;continue;}

}


for(i=0;i<n;i++)
{ for(j= 0;j<n;j++)
printf("%3c",a[i][j]);
printf("\n");

}
}

2006-11-04 21:36
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 
n==11的 情况:
H H H H H H H H H H H
H T T T T T T T T T H
H T 1 1 1 1 1 1 1 T H
H T 1 2 2 2 2 2 1 T H
H T 1 2 3 3 3 2 1 T H
H T 1 2 3 4 3 2 1 T H
H T 1 2 3 3 3 2 1 T H
H T 1 2 2 2 2 2 1 T H
H T 1 1 1 1 1 1 1 T H
H T T T T T T T T T H
H H H H H H H H H H H
2006-11-04 21:43
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 
#include<stdio.h>
#include<math.h>
#define N 15
#define M (N-1)/2
int main()
{
int i,j;
for(i=-M;i<=M;i++)
{
for(j=-M;j<=M;j++)
{
if(abs(i)==M || abs(j)==M)
printf("H");
else if(abs(i)==M-1 || abs(j)==M-1)
printf("T");
else
printf("%d",M-1-(abs(i)>abs(j)?abs(i):abs(j)));
}
printf("\n");
}
return 0;
}

2006-11-04 21:57
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 

不错

2006-11-04 22:01
ziyi555
Rank: 1
等 级:新手上路
帖 子:49
专家分:0
注 册:2006-11-4
收藏
得分:0 

谢谢 两种方法都试了下
都有看不懂的地方 2 楼的方法我有好多地方都看不明白
4楼的方法 我理解起来还可以
if(abs(i)==M || abs(j)==M) //这是控制第一圈
printf("H");
if(abs(i)==M-1 || abs(j)==M-1) //这是控制第二圈
printf("T");
else //用else 控制剩下的圈
printf("%d",M-1-(abs(i)>abs(j)?abs(i):abs(j))); // 这个不太懂..能不能讲一下下


放手一博
2006-11-05 04:27
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 

我也试图编写过类似的程序,但没成功
如下
#include <iostream>
using namespace std;

//实现数字正方形 如下:
// 4444444
// 4333334
// 4322234
// 4321234
// 4322234
// 4333334
// 4444444


int main()
{
int n,e;

cout << "entre the max\n";
cin >> n; //n为最外圈的数字(即最大数字)

do
{
int i=0;
int b=1;

do //上横行循环
{
i++;

if (i<=(2*n-1)) //2*n-1为一行的字符数
cout << n;
else
cout << endl; //打完一行后换行打竖列
}
while( i<=(2*n-1));

do //竖列循环
{
cout << n;
b++;

int a=0;

do //竖行之间的空格循环
{

a++;
if (a<=(2*n-3)) //2*n-3为两竖行之间的空格数
cout << " ";
else
cout <<n<<endl; //打满一行后换行打下一行
}
while (a <=(2*n-3));


}
while (b<=(2*n-3));

int c=0;

do //横行循环
{
c++;
if (c<=(2*n-1)) //此处的2*n-1与上横行一样
cout << n;

}
while (c<=(2*n-1));

int d;
for(d=0;d <=(2*n-1)*(2*n-2);d++ ) //退格
cout << "\b";


/*(2*n-1)*(2*n-2)为从最后一行的最后一个数字
退到第二行的第二个位置所需的循环次数,例如试例中从最后一行的最后一个4到
第二行的第一个3的位置所需41次退格
*/

e++;
/*此处的e表示从4到1一共4圈,即上、下横行、竖列
与退格这几个循环都要重复n次,以实现事例中的效果
*/
n=n-1;

}
while (e<=n);

return 0;

}


麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2006-11-05 08:08
zhaoyg
Rank: 1
等 级:新手上路
帖 子:328
专家分:0
注 册:2006-8-28
收藏
得分:0 
与前面两位的答案相比,我的就显得很愚,并且还是没有成功型的。望大家能指出错误

麻雀飞上枝头变凤凰,而菜鸟的我飞上枝头却感冒了,为什么我的脑袋如此的不管用呢。
2006-11-05 08:10
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 

// 1 2 3 4 5
//16 17 18 19 6
//15 24 25 20 7
//14 23 22 21 8
//13 12 11 10 9
#include <stdio.h>
#define n 5 //n为奇数
void main()
{
int i=0,j=0,k;
int a[n][n]={0};
for(k=1;k<=n*n;k++)

{
a[i][j] = k;
if(i <= j && i+j <n-1) { j++; continue;} //如果在上面的三角型则右移

if(i < j && i +j >= n-1 ) {i++;continue;}//如果在右面的三角型则下移
if(i >= j && i+j >n-1) {j--;continue;}//如果在下面的三角型则左移
if(i > j && i+j <= n-1 )
if(i - j== 1) {j++;}/*这里要换圈了。*/else {i-- ;continue;}//如果在左面的三角型则上移

}


for(i=0;i<n;i++)
{ for(j= 0;j<n;j++)
printf("%3d",a[i][j]);
printf("\n");

}
}

2006-11-05 19:11
快速回复:一个图形的简单程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037357 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved