如题,给出x=73,y=31,如何让两数乘积最大?位数定义:各个位上的数字例73,位数有7,3
当前,只有一种交换策略,x=71,y=33,发现交换以后有:x+y=x'+y',如果抽象成求最大面积就好办了,可能一下想不到,还得多积累经验,不是你不知道是你想不到是你见得少,没见识...
当是正方形的时候面积最大小学就学过的东西,那就应该让交换后的x和y差值越小则面积越大
具体实现,比较xy哪个大,然后从确定了大小那位数之后的数开始比较,
若x>y,且该位上的数大于y上的位数,那就进行交换
x<y,且该位上的数小于y上的位数,再行交换
总的来说让大的数变小,小的数变大,实现差值变小--
include <string.h>
include <stdio.h>
char x[1000000];
char y[1000000];
void swap(int j) {
char temp=x[j];
x[j]=y[j];
y[j]=temp;
}
int main() {
int testTimes;
scanf("%d",&testTimes);
for(int k=0; k<testTimes; k++) {
//先看看是x大还是y大,因为长度相同从左到右比较,0代表x大1代表y大
scanf("%s",x);
scanf("%s",y);
int state=-1;
int len=strlen(x);
int j;
int j1;
for(j=0; j<len; j++) {
if(x[j]-'0'>y[j]-'0') { //位数相比
state=0;
j1=j+1;
break;
} else if(x[j]-'0'y[j]-'0') {
} else {
state=1;
j1=j+1;
break;
}
}
for(j=j1; j<len; j++) { //如果x大,如果遇到了y自第二位的数比x大的就交换
if(x[j]-'0'>=y[j]-'0'&&state0) {
swap(j);
} else if(x[j]-'0'<=y[j]-'0'&&state==1) {
swap(j);
}
}
printf("%s\n",x);
printf("%s",y);
}
}