用1-9组成三个1:2:3的三位数,要求数字不重复的c代码,求改错。

#include<stdio.h>
int main()
     {int a[9],i,j,k,t,b,c,d,e,p = 1;
     for(i=123 ;i <= 327 ; i++)
         {b = i;
         a[0] = b % 10;
         b = b / 10;
         a[1] = b % 10;
         b = b / 10;
         a[2] = b;
         c = 2 * i;
         a[3] = c % 10;
         c = c / 10;
         a[4] = c % 10;
         c = c / 10;
         a[5] = c;
         d = 3 * i;
         a[6] = d % 10;
         d = d / 10;
         a[7] = d % 10;
         d = d / 10;
         a[8] = d;
         for(j = 0 ; j < 9 ; j++)
             {for(k = j + 1 ; k < 9 ; k++)
                  {if(a[j] == a[k])
                  p = 0;}}
         if(p)
             {for(t = 0 ; t < 9 ; t++)
                 {printf("%d",a[t]);
                 if(e % 3 == 0)
                 printf("\n");
                 e++;}}}
     return 0;}

我给你简单说一下:
要满足1:2:3各位都必须满足相应得倍数关系
for(i=123 ;i <= 327 ; i++){
...
}
没有完全获取所得的数字,且操作的数字应为3位,不是9位。
要满足 1:2:3 各位不能重复
for(j = 0 ; j < 9 ; j++)
{for(k = j + 1 ; k < 9 ; k++)
这样是错误的,各个位数不重复不代表各个结果数字之间不重复,比如说123和246都满足条件,但123中有2,246中也有2,这是不冲突的。
最后
for(t = 0 ; t < 9 ; t++)
{printf("%d",a[t]);
if(e % 3 == 0)
printf("\n");
e++;}
e没有初始化,e % 3没有意义。

你的算法有问题,我给你写个正确的。
#include
int main()
{

int i,j,k;
for(i = 1;i <= 9;i++)
for(j = 2;j <= 9;j++)
if(i != j && j / i == 2 && j % 2 == 0)
for(k = 3;k <= 9;k++)
if(i != k && j != k && k / i == 3 && k % 3 == 0 && i + j == k)
printf("%d%d%d\n",i,j,k);
return 0;
}