求数对(M,N),可以将M中的一些数字从后面到前面,且不改变它们的顺序来形成N。给定两个数字A,B,其中A与B的位数相同,0<A<B<9999999,求这之间可以找到多少个这样的数对满足:A<=M<N,如(12345,34512)就符合以上所述。
代码实现:
#include<stdio.h>
#include<math.h>
int main()
{
int m, n;
int t = 0;
scanf("%d %d",&m,&n);
for(int j=m;j<=n;j++){
int w=0;
int s=j;
while(s){//计算s的位数w
s/=10;
w++;
}
for(int i=1;i<=w;i++){
//例如12345转为34512:
//12345%1000*100+12345/1000
int sum=(j%((int)pow(10,w-i))) * (pow(10,i))+j/(int)(pow(10,w-i));
//保证转换后的数大于转换前的数,防止数对重复
if(sum>m&&sum<=n&&j<sum){
printf("(%d,%d)\n",j,sum);
t++;//符合要求数对总数
}
}
}
printf("%d\n",t);
return 0;
}
结果示例:
输出150到250之间所有符合要求的数对