- 论坛徽章:
- 0
|
我的思路:
先将这25个数放在矩阵里使每一行的行都为65.
再在竖排里调整.
盼更精简思路\算法.
- #include <stdio.h>
- void changeit(int *a ,int *b)
- {
- int values;
-
- values=*b;
- *b=*a;
- *a=values;
- }
- main()
- {
- int a[5][5],flag[26];
- int i[6];
- int j=0,k,l,m,n;
- for(i[1]=1;i[1]<=25;i[1]++)
- {
-
- if (flag[i[1]] == 1) continue;
- flag[i[1]] = 1;
-
- for(i[2]=i[1]+1;i[2]<=25;i[2]++)
- {
- if ( flag[i[2]] == 1 ) continue;
- flag[i[2]] =1;
-
- for(i[3]=i[2]+1;i[3]<=25;i[3]++)
- {
- if ( flag[i[3]] == 1 ) continue;
- flag[i[3]] =1;
-
- for(i[4]=i[3]+1;i[4]<=25;i[4]++)
- {
- if ( flag[i[4]] == 1 ) continue;
- flag[i[4]] =1;
-
- for(i[5]=i[4]+1;i[5]<=25;i[5]++)
- {
- if ( flag[i[5]] == 1 ) continue;
- flag[i[5]] =1;
-
- if ( i[1]+i[2]+i[3]+i[4]+i[5] == 65 )
- {
- goto next;
- }
- flag[i[5]] =0;
- }
- flag[i[4]] =0;
- }
- flag[i[3]] =0;
- }
- flag[i[2]] = 0;
- }
- flag[i[1]] =0;
- next:
- flag[i[1]] =0;
-
- for( k=0;k<5;k++)
- a[j][k] = i[k+1];
- j++;
- }
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- printf("%02d ",a[j][k]);
- printf("\n");
- }
- printf("\n\n");
-
-
- for(j=0;j<5;j++){
- for(l=j;l<5;l++)
- for(m=j;m<5;m++)
- for(n=j;n<5;n++)
- for(k=j;k<5;k++)
- if ( a[1][l]+a[2][m]+a[3][n]+a[4][j]+a[0][j] == 65 )
- {
- /*change it*/
- changeit(&a[1][l],&a[1][j]);
- changeit(&a[2][m],&a[2][j]);
- changeit(&a[3][n],&a[3][j]);
- changeit(&a[4][k],&a[4][j]);
- }
- }
-
- for(j=0;j<5;j++)
- {
- for(k=0;k<5;k++)
- printf("%02d ",a[j][k]);
- printf("\n");
- }
- }
复制代码
[ 本帖最后由 zhhui2000 于 2006-11-6 09:38 编辑 ] |
|