59.填表格
將1、2、3、4、5和6 填入下表中,要使得每一列右邊的數(shù)字比左邊的數(shù)字大,每一行下面的數(shù)字比上面的數(shù)字大。按此要求,可有幾種填寫方法?
*問題分析與算法設計
按題目的要求進行分析,數(shù)字1一定是放在第一行第一列的格中,數(shù)字6一定是放在第二行第三列的格中。在實現(xiàn)時可用一個一維數(shù)組表示,前三個元素表示第一行,后三個元素表示第二行。先根據(jù)原題初始化數(shù)組,再根據(jù)題目中填 寫數(shù)字的要求進行試探。
*程序與程序注釋
#include
int jud1(int s[]);
void print(int u[]);
int count; /*計數(shù)器*/
void main()
{
static int a[]={1,2,3,4,5,6}; /*初始化數(shù)組*/
printf("The possble table satisfied above conditions are:\n");
for(a[1]=a[0]+1;a[1]<=5;++a[1]) /*a[1]必須大于a[0]*/
for(a[2]=a[1]+1;a[2]<=5;++a[2]) /*a[2]必須大于a[1]*/
for(a[3]=a[0]+1;a[3]<=5;++a[3]) /*第二行的a[3]必須大于a[0]*/
for(a[4]=a[1]>a[3]?a[1]+1:a[3]+1;a[4]<=5;++a[4])
/*第二行的a[4]必須大于左側(cè)a[3]和上邊a[1]*/
if(jud1(a)) print(a); /*如果滿足題意,打印結(jié)果*/
}
int jud1(int s[])
{
int i,l;
for(l=1;l<4;l++)
for(i=l+1;i<5;++i)
if(s[l]==s[i]) return 0; /*若數(shù)組中的數(shù)字有重復的,返回0*/
return 1; /*若數(shù)組中的數(shù)字沒有重復的,返回1*/
}
void print(int u[])
{
int k;
printf("\nNo.:%d",++count);
for(k=0;k<6;k++)
if(k%3==0) /*輸出數(shù)組的前三個元素作為第一行*/
printf("\n%d",u[k]);
else /*輸出數(shù)組的后三個元素作為第二行*/
printf("%d",u[k]);
}
*運行結(jié)果
The possble table satisfied above conditions are:
No.1: No.2: No.3: No.4: No.5:
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5
4 5 6 3 5 6 3 4 6 2 5 6 2 4 6
將1、2、3、4、5和6 填入下表中,要使得每一列右邊的數(shù)字比左邊的數(shù)字大,每一行下面的數(shù)字比上面的數(shù)字大。按此要求,可有幾種填寫方法?
*問題分析與算法設計
按題目的要求進行分析,數(shù)字1一定是放在第一行第一列的格中,數(shù)字6一定是放在第二行第三列的格中。在實現(xiàn)時可用一個一維數(shù)組表示,前三個元素表示第一行,后三個元素表示第二行。先根據(jù)原題初始化數(shù)組,再根據(jù)題目中填 寫數(shù)字的要求進行試探。
*程序與程序注釋
#include
int jud1(int s[]);
void print(int u[]);
int count; /*計數(shù)器*/
void main()
{
static int a[]={1,2,3,4,5,6}; /*初始化數(shù)組*/
printf("The possble table satisfied above conditions are:\n");
for(a[1]=a[0]+1;a[1]<=5;++a[1]) /*a[1]必須大于a[0]*/
for(a[2]=a[1]+1;a[2]<=5;++a[2]) /*a[2]必須大于a[1]*/
for(a[3]=a[0]+1;a[3]<=5;++a[3]) /*第二行的a[3]必須大于a[0]*/
for(a[4]=a[1]>a[3]?a[1]+1:a[3]+1;a[4]<=5;++a[4])
/*第二行的a[4]必須大于左側(cè)a[3]和上邊a[1]*/
if(jud1(a)) print(a); /*如果滿足題意,打印結(jié)果*/
}
int jud1(int s[])
{
int i,l;
for(l=1;l<4;l++)
for(i=l+1;i<5;++i)
if(s[l]==s[i]) return 0; /*若數(shù)組中的數(shù)字有重復的,返回0*/
return 1; /*若數(shù)組中的數(shù)字沒有重復的,返回1*/
}
void print(int u[])
{
int k;
printf("\nNo.:%d",++count);
for(k=0;k<6;k++)
if(k%3==0) /*輸出數(shù)組的前三個元素作為第一行*/
printf("\n%d",u[k]);
else /*輸出數(shù)組的后三個元素作為第二行*/
printf("%d",u[k]);
}
*運行結(jié)果
The possble table satisfied above conditions are:
No.1: No.2: No.3: No.4: No.5:
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5
4 5 6 3 5 6 3 4 6 2 5 6 2 4 6