题解 | #提取不重复的整数#
思路:
(1)依次提取出个位,十位,百位,千位,……(余数矩阵)
(2)构造比较器矩阵[1,2,3,4,5,6,7,8,9]
(3)从前向后扫掠余数矩阵,若余数矩阵元素等于任一比较器矩阵元素,输出该余数,并令该比较器元素为-1(不是1,2,……,9就可以)。
继续扫掠余数矩阵,若余数矩阵元素等于任一比较器矩阵(上一步形成的新矩阵)元素,输出该余数,并令该比较器元素为-1(不是1,2,……,9就可以)。
……
程序:
#include<stdio.h>
int main(){
int x=0,shang[10]={0},yushu[10]={0},bijiaoqi[9]={1,2,3,4,5,6,7,8,9},i,j,k,num=1;
scanf("%d",&x);
//构造余数矩阵:个位,十位,百位,千位,……
shang[0]=x;
yushu[0]=shang[0]%10;//个位
for(i=1;i<10;i++)
{
shang[i]=shang[i-1]/10;
yushu[i]=shang[i]%10;//个位,十位,百位,……
if (shang[i]>0)
num++;//总位数=num
else if(shang[i]<=0)
break;
}
//从前向后扫掠,若余数矩阵中元素等于比较器矩阵中任一元素,输出该余数,并使该比较器元素为-1。继续扫掠余数矩阵
for(j=0;j<num;j++)
{
for(k=0;k<9;k++)
{
if(yushu[j]==bijiaoqi[k])
{
printf("%d",yushu[j]);
bijiaoqi[k]=-1;//不是1,2,3,4,5,6,7,8,9就行
break;
}
}
}
}