今天做poj 2718 wa的一血 2718的一些坑
1 中间二分判断 中间a[mid]肯定不能为零 为零位数都不会一样(逃qaq)
2 a[0]也不能为零
不会排列的下看
#include<cstdio>
#include<algorithm> //包含next_permutation
using namespace std;
int main( ) {
int n, p[10];
scanf("%d", &n);
for(int i = 0; i < n; i++) scanf("%d", &p[i]);
sort(p, p+n); //排序,得到p的最小排列
do {
if(p[0]!=0){
for(int i = 0; i < n; i++) printf("%d ", p[i]);
} //输出排列p
printf("\n");
} while(next_permutation(p, p+n)); //求下一个排列
return 0;
}
此时输入的三个数全排列都是开始非零
还可以直接加条件
do
{
if(a[mid]&& a[0])
{
int x=a[0],y=a[mid];
for(int i=1;i<mid;i++)
x=x*10+a[i];
for(int i=mid+1;i<n;i++)
y=y*10+a[i];
if(ans>abs(x-y))
ans=abs(x-y);
}
}while(next_permutation(a,a+n));
cout<<ans<<endl;
还要注意一下这个
while((c=getchar())!='\n')
{
if(c!=' '){
a[n]=c-'0';
n+=1;