求数对(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之间所有符合要求的数对
在这里插入图片描述