poj1012 模拟

类似于这种题意的题很多,总共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;
}

原文地址:https://www.cnblogs.com/orangeblog/p/2452830.html