类似于这种题意的题很多,总共2*k个数,从大到小排序,每次去掉一个数,条件是后k个数要在前k个数之前;
基本思路:
从K+1开始,对总数取余判断(这里的总数是变化的,每次减一),如果余数<=k,则不符合条件,接着判断K+2的情况,直至找到一个符合条件的;
还有每次取余时,要把的被除数减去(上次的总数与余数的差);不过超时了,因为就十四个,所以利用程序求出所有值,打表了!
#include<iostream>
using namespace std;
int main()
{
int k;
int t;
int bl;
int sum;
while(cin>>k&&k!=0)
{
if(k==10)
{cout<<"93313"<<endl;continue;}
if(k==11)
{cout<<"459901"<<endl;continue;}
if(k==12)
{cout<<"1358657"<<endl;continue;}
if(k==13)
{cout<<"2504881"<<endl;continue;}
if(k==14)
{
cout<<"13482720"<<endl;continue;
}
int i,j;
i=k+1;
while(true)
{
t=k;
sum=k*2;
int r=0;
int p=i;
while(t)
{
r=p%sum;
if(r<=k&&r!=0){
i++;
break;
}
int temp;
if(r==0)
temp=0;
else
temp=sum-r;
p=i-temp;
sum--;
t--;
}
if(t==0)
{
cout<<i<<endl;break;
}
}
}
return 0;
}