您的位置:首页 > 其它

数字0到9的奇妙变幻(填表格)

2015-01-28 16:06 232 查看
/****************************************
*  File Name  : figure.c
*  Creat Data : 2015.1.28
*  Author     : ZY
*****************************************/

/*数字0到9的奇妙变幻*/
/*填表格*/
/*将1,2,3,4,5和6填入下表中,要使的每一列右边的数字比
左边的数字大,每一行下面的数字比上面的数字大,按此要
求,可有几种填写方法?
2*3表格*/

#include <stdio.h>
int main(void)
{
int count = 0;
int a[6];
a[0] = 1;
a[5] = 6;
printf("The possible table satisfied above conditions are:\n");
for(a[1]= 2;a[1] < 6;a[1]++)
{
for(a[2] = 2;a[2] < 6;a[2]++)
{
for(a[3] = 2;a[3] < 6;a[3]++)
{
for(a[4] = 2;a[4] < 6;a[4]++)
{
if((a[1]!=a[2])&&(a[1]!=a[3])
&&(a[1]!=a[4])&&(a[2]!=a[3])
&&(a[2]!=a[4])&&(a[3]!=a[4])
&&(a[1]<a[2])&&(a[3]<a[4])
&&(a[1]<a[4]))
{
printf("No.:%d \n",++count);
printf("%d%d%d\n%d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
}
}
}
}
}
return 0;
}


/*将1到9这九个数字分成三个3位数,要求第一个3位数,
正好是第二个3位数的二倍,是第三个3位数的三倍。问
应当怎么分法?*/

#include <stdio.h>
int a[9];
int ok(int t,int *z)//分解t的值,将其存入z指向的三个数组元素,若满足返回1
{
int *p1,*p2;
for(p1 = z;p1 < z+3;p1++)
{
*p1 = t%10;//分解整数
t /= 10;
for(p2 = a;p2 < p1;p2++)//查询分解出来的数字是否已经出现
{
if(0 == *p1||*p2 == *p1)//若重复返回0
{
return 0;
}
}
}
return 1;//否则返回1
}

int main(void)
{
int m,count = 0;
for(m = 123;m < 334;m++)//试探可能的三位数
{
if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,a+6))//若满足题意,输出结果
{
printf("No.%d:%d %d %d\n",++count,m,2*m,3*m);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: