下面是我想的:你看看吧,还不会就问我
定义N为100; //N>n
定义a[N]={0};
输入 n ;
从键盘输入的n个数存入数组a[N];//数组的前n个数
for i=0 to n-1
遍历数组,冒泡法从小到大排列,记录数组中不同数的个数f,和是否有0,用t记,t=1 表示有,并将这f个数存入数组b[N]中;
由排列可得:
三位数个数s=f*(f-1)*(f-2)-t*(f-1)(f-2);
设三位数百位为x,十位为y,个数为z
下面输出说有的三位数程序:
for i=0 to f-1 //即for(i=0;i<=f-1;i++)
if(b[i]){
x=b[i];
for j=0 to f-1
if(j!=i){
y=b[j];
for l=0 to f-1
if(l!=i&&l!=j){
z=b[l];
cout<<"xyz="<
}
}
#include
#define MAX 4 //这里的MAX可以在3到9之间随意定义
void main()
{
int a,b,c,d=0,i,shuzu1[MAX],shuzu2[3],shu,flag=0;
long int e=MAX*MAX*MAX;
int shuzu3[MAX*MAX*MAX];
printf("please input %d numbers:\n",MAX);
for(a=0;a
for(a=0;a
shuzu2[0]=shuzu1[a];
shuzu2[1]=shuzu1[b];
shuzu2[2]=shuzu1[c];
shu=100*shuzu2[0]+10*shuzu2[1]+shuzu2[2];
shuzu3[d]=shu;
d++;
flag=0;
if(shuzu2[0]!=shuzu2[1]&&shuzu2[0]!=shuzu2[2]&&shuzu2[1]!=shuzu2[2])
{
for(i=0;i
if(shu==shuzu3[i])
{
flag=1;
}
}
if(flag==0&&shu>100)
printf("%d\t",shu);
}
}
printf("\n");
}
这个不是排列的问题嘛
从4个数中取3个数...公式是P(4, 3)
4! / (4 -3)!
用一个数组接收输入的数字,用一个3层的for循环从数组中确定出3个数字,再用一个3层的for循环交叉输出,循环中要用if判断首位是否为0,不是0就输出,并用t记录个数。这就可以了。
c语言?没学过