呵呵~我不是河南省的,我只是顺便做下~
第一题:NYOJ 540(奇怪的排序),比较简单,但是我下sort排序时少加了一位,WA~~~
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=100;
struct Perm{
Perm(){A=B=0;}
int A,B;
};
bool mysort(const Perm &P1,const Perm &P2)
{ if(P1.B>P2.B) return P1.B<P2.B;
}
int main()
{ int value,num,pos,low,high;
cin>>num;
while(num--)
{ Perm P[MAX];
cin>>low>>high;
for(int i=low;i<=high;i++)
{ value=P[pos=i-low].A=i;
while(value)
{ P[pos].B=P[pos].B*10+value%10;
value/=10;
}
}
sort(P,P+high-low+1,mysort);
for(int i=0;i<high-low;i++)
cout<<P[i].A<<" ";
cout<<P[high-low].A<<endl;
}
return 0;
}
第二题:NYOJ 541(最强DE战斗力),意思就是给你一个整数要你拆分为任意自然数之和,求这个数的最大乘积是多少。
对于6,可以进行如下的拆分:3*3=9;
对于12,拆分为:3*3*3*3=81;
对于19,拆分为:3*3*3*3*3*2*2=972;
这个时候拆分的方法就是,将它分解为:3^a+2^b(b=0,1,2)的形式是最大的。大数资料请见大数相乘和大数类模板。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace st