当前位置:编程学习 > C/C++ >>

C++编程问题~

函数fun功能:建立n*n矩阵,矩阵元素构成规律是:
当n=5时,
11111
12221
12321
12221
11111
当n=4时,
1111
1221
1221
1111
这道题很简单可是俺不会,希望大家帮帮忙~~
答案:#include <iostream>
#include <iomanip>
#define N 5
using namespace std;

int main()
{
int a[N+1][N+1];
int row , col, i, j, k, t, p,n;
row = 0; col = 1; k = N; t = 1; p = 1, n = 0;

do

// 赋值的方向是矩阵的外层左上角至左下角的螺旋形的方式
{
if(n != 0 && n%2 == 0)

// 矩阵外层赋值完,p加1进入下一内层赋值
p++;
for(i = 1; i <= k; i++)
// 给一列数赋值
{
row += t;
a[row][col] = p;
n++;
}

k--;



// 列数减1
for(i = 1; i <= k; i++)

// 给一行赋值
{
col += t;
a[row][col] = p;
n++;
}

t = -t;


// 改变赋值方向

}while( p <= N/2);

for(i = 1; i <= N; ++i)


// 逐行输出
{
for(j = 1; j <= N; ++j)
cout << setw(5) << a[i][j];
cout << endl;
}
cout << endl;
return 0;
}
// ****************************** 注意 ***************************************
// row、col是矩阵的行列标; 变量k,初值为N, 当数据存入到左下角或右上角时,k减1,这样可保证输出是方阵。
// 变量t,初值为1,当数据存入到右下角时,令t改变符号,当存入到左上角时,t又改变符号,这样可保证赋值到正确的数组坐标。
// 如果你想要改变输出方阵的大小时,只要在宏定义中改变 N 的大小就得了。


在VC6.0成功运行
看似简单,却花了我不少时间啊!
希望对你有帮助。
#include<iostream>
#include<iomanip>
using namespace std;
int Arry[100][100];
int Min(int i ,int j)
{
return i<j?i:j ;
}


void fun(int n)
{
for(int i=1 ; i<=(n+1)/2 ;i++)
{
for(int j=1 ;j<=(n+1)/2 ;j++)
{
Arry[i][j] = Min(i,j);                     //对称性
Arry[i][n-j+1] = Arry[i][j];
Arry[n-i+1][j] = Arry[i][j];
Arry[n-i+1][n-j+1] = Arry[i][j];
}
}
for(int a=1;a<=n;a++)
{
for(int b=1;b<=n;b++)
       cout<<setw(3)<<Arry[a][b];//<<" ";//cout<<Arry[a][b]<<" "; //输出显示的好一点
         cout<<endl;
}
}


int main()
{
int n;
while(cin>>n)
   fun(n);

return 0;
}

上一个:C++编程求解
下一个:C++编程问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,