C语言1094题目,基于visual Studio2013解决C语言竞赛题之1094纵横图
/************************************************************************/
/* 二)程序設計
⑴奇階縱橫圖n=2m+1請見填寫方法分析1)。 該程序在 數組23題已經完成
⑵偶階縱橫圖n=2(2m+1)時,算法分析是把方陣劃成A、B、C、D四個小子陣,
然后進行多次交換數字來完成,較麻煩,但可從中發現巧妙的規律,A、B、C、D子陣中各元素,
都可以由 A子陣中相對位置上的元素加上一個常數得到,如B~(u/2)2,C~2(u/2)2D~3(u/2)2,
只要按奇階縱橫圖先填A子陣,而B、C、D子陣便可由A子陣演變而成。
⑶偶階縱橫圖n=4m時,先用循環判斷方陣中每一位置是否在對角線上,如在對角線上,則將該位置賦值為1,
否則,賦值為0。然后將X←0,Y←N*N+1,X、Y為行列值。
然后用二重循環(I,J)從1依次變化至n。若A[I][J]=1,則A[I][J]←Y,若A[I][J]=0, 則A[I][J]←X,循環結束即得n=4m的方陣。
*/
/************************************************************************/
#include
#include
#include
void MF494(int arr[][8])
{
int num=8;
int num1=num/4;
int numB=num*num+1;
for (int i=0;i
{
for (int j=0;j
{
if ((i+j)%4==3||abs(i-j)%4==0)
{
arr[i][j]=numB-i*num-j-1;
}
else
arr[i][j]=i*num+j+1;
printf("%3d",arr[i][j]);
}
printf("\n");
}
}
//const int N=8;
void MF5()
{int k=2;
int arr10[10][10]={0};
#pragma region W
{int a[5][5] = {0};
int num = 1;
int i = 0;
int j = 5/2;
int ci = 0;
int cj = 0;
while (1){
a[i][j] = num++; //將num當前數存入a[i][j];
ci = i;//保存i當前值;
cj = j;//保存j當前值;
if (ci == 0)i = 5 - 1;//判斷上一個是否在第0行
else i--;
if (cj == 5 - 1){//判斷上一個是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){//判斷下一個位置是否被占有,或上一個是否在第0行,第N-1列
i = ci+1;
j = cj;
}
int flag = 0;
for (int u = 0; u < 5; u++){//判斷矩陣是否已滿
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break;//flag=0說明矩陣已經填滿,跳出循環
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i][j]=a[i][j];
}
}
}
#pragma endregion W
#pragma region W
{int a[5][5] = {0};
int num = 26;
int i = 0;
int j = 5/2;
int ci = 0;
int cj = 0;
while (1){
a[i][j] = num++; //將num當前數存入a[i][j];
ci = i;//保存i當前值;
cj = j;//保存j當前值;
if (ci == 0)i = 5 - 1;//判斷上一個是否在第0行
else i--;
if (cj == 5 - 1){//判斷上一個是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){//判斷下一個位置是否被占有,或上一個是否在第0行,第N-1列
i = ci+1;
j = cj;
}
int flag = 0;
for (int u = 0; u < 5; u++){//判斷矩陣是否已滿
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break;//flag=0說明矩陣已經填滿,跳出循環
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i+5][j+5]=a[i][j];
}
}
}
#pragma endregion
#pragma region W
{int a[5][5] = {0};
int num = 51;
int i = 0;
int j = 5/2;
int ci = 0;
int cj = 0;
while (1){
a[i][j] = num++; //將num當前數存入a[i][j];
ci = i;//保存i當前值;
cj = j;//保存j當前值;
if (ci == 0)i = 5 - 1;//判斷上一個是否在第0行
else i--;
if (cj == 5 - 1){//判斷上一個是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){//判斷下一個位置是否被占有,或上一個是否在第0行,第N-1列
i = ci+1;
j = cj;
}
int flag = 0;
for (int u = 0; u < 5; u++){//判斷矩陣是否已滿
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break;//flag=0說明矩陣已經填滿,跳出循環
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i][j+5]=a[i][j];
}
}
}
#pragma endregion
#pragma region W
{int a[5][5] = {0};
int num = 76;
int i = 0;
int j = 5/2;
int ci = 0;
int cj = 0;
while (1){
a[i][j] = num++; //將num當前數存入a[i][j];
ci = i;//保存i當前值;
cj = j;//保存j當前值;
if (ci == 0)i = 5 - 1;//判斷上一個是否在第0行
else i--;
if (cj == 5 - 1){//判斷上一個是否在第N-1列
j = 0;
i = ci-1;
}
else j++;
if (a[i][j] != 0 || (ci == 0 && cj == 5 - 1)){//判斷下一個位置是否被占有,或上一個是否在第0行,第N-1列
i = ci+1;
j = cj;
}
int flag = 0;
for (int u = 0; u < 5; u++){//判斷矩陣是否已滿
int flag1 = 0;
for (int v = 0; v < 5; v++){
if (a[u][v] == 0){
flag1 = 1;
break;
}
}
if (flag1 == 1){
flag = 1;
break;
}
}
if (flag == 0)break;//flag=0說明矩陣已經填滿,跳出循環
}
for (int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
arr10[i+5][j]=a[i][j];
}
}
}
#pragma endregion
for (int i=0;i<5;i++)
{
for (int j=0;j<2;j++)
{
if (i==2)
{
int k=j+2;
int temp=arr10[i][k];
arr10[i][k]=arr10[i+5][k];
arr10[i+5][k]=temp;
}
else
{
int temp=arr10[i][j];
arr10[i][j]=arr10[i+5][j];
arr10[i+5][j]=temp;
}
}
}
for (int j=0;j<5;j++)
{
int temp=arr10[j][5+k];
arr10[j][5+k]=arr10[j+5][5+k];
arr10[j+5][5+k]=temp;
}
for (int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
printf("%3d",arr10[i][j]);
}
printf("\n");
}
}
void main()
{
printf(" 奇數的數組23題已經打印 這里打印 n=10 n=8 兩種情況\n");
MF5();
printf("\n\n\n");
int arr[8][8]={0};
MF494(arr);
system("pause");
}
總結
以上是生活随笔為你收集整理的C语言1094题目,基于visual Studio2013解决C语言竞赛题之1094纵横图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何获取请求的url_听说你
- 下一篇: ubuntu 转mysql_(转)Ubu