填表格

将1、2、3、4、5和6 填入下表中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比上面的数字大。按此要求,可有几种填写方法?
*问题分析与算法设计
按题目的要求进行分析,数字1一定是放在第一行第一列的格中,数字6一定是放在第二行第三列的格中。在实现时可用一个一维数组表示,前三个元素表示第一行,后三个元素表示第二行。先根据原题初始化数组,再根据题目中填 写数字的要求进行试探。

 1 #include <stdio.h>
  2 
  3 int a[9]={0};
  4 int ok(int, int *);
  5 int main()
  6 {
  7     int m, count = 0;
  8     for (m = 123; m <= 333; m++ )
  9     {
 10         if (ok(m, a) && ok(2*m, a + 3) && (3*m, a + 6))
 11         {
 12             printf("No.%d: %d %d %d\n", ++count, m, 2*m, 3*m);
 13         }
 14     }
 15 
 16     return 0;
 17 }
 18 
 19 int ok(int t, int *z)
 20 {
 21     int *p1 = NULL,*p2 = NULL;
 22     for (p1 = z; p1 < z + 3; p1++)
 23     {
 24         *p1 = t%10;
 25         t /= 10;
 26         for (p2 = a; p2 < p1; p2++)
 27         {
 28             if (0 == *p1 || *p1 == *p2)
 29             {
 30                 return 0;
 31             }
 32         }
 33     }
 34     return 1;
 35 }



[root@localhost 59]# ./a.out 

No.1: 134 268 402
No.2: 138 276 414
No.3: 139 278 417
No.4: 143 286 429
No.5: 148 296 444
No.6: 164 328 492
No.7: 176 352 528
No.8: 178 356 534
No.9: 179 358 537
No.10: 182 364 546
No.11: 186 372 558
No.12: 192 384 576
No.13: 218 436 654
No.14: 219 438 657
No.15: 238 476 714
No.16: 239 478 717
No.17: 267 534 801
No.18: 269 538 807
No.19: 273 546 819
No.20: 293 586 879
No.21: 314 628 942
No.22: 327 654 981
No.23: 329 658 987
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值