HTTTTTTTH
HT11111TH
HT12221TH
HT12321TH
HT12221TH
HT11111TH
HTTTTTTTH
HHHHHHHHH
我会打空心星星,以为这个和那个差不多,但是做起来却太烦琐了,肯定是自己的方法不对。
而且还没设置输入N值的变量。这个图怎么打才能简单点 ??
要求外2圈是H和T里面的从1开始递增,并且要求输入N值 让边上符号的个数与N相等
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");
}
}
不错
谢谢 两种方法都试了下
都有看不懂的地方 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))); // 这个不太懂..能不能讲一下下
我也试图编写过类似的程序,但没成功
如下
#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;
}
// 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");
}
}