切换到宽版
  • 9217阅读
  • 5回复

c++编程)键盘输入一个高精度的正整数M,去掉其中任意S个数字后使剩下的数最小 [复制链接]

上一主题 下一主题
离线guoguo0518
 
只看楼主 倒序阅读 0 发表于: 2007-06-27
例如:M=2837951, S=4
输出结果为:
237951
23751
2351
231
在比如53256789009432432,S=9
输出结果为:
3256789009432432
256789009432432
25678009432432
2567009432432
256009432432
25009432432
2009432432
求助
离线23503945
只看该作者 1 发表于: 2007-06-29
#include <iostream.h>


void main()
{
  char num[18]="53256789009432432"; //考虑大数
   
   int a=9;           // 去掉a位
   
   int count=0;
   
   int b=0;
   
   while(count<a)  
   {    
       if(b<=16)
       {
           int i=0,j=0;
           while(num[b+i]==-1)
           {
               i++;
           }
           while(num[b+1+i+j]==-1)
           {
               j++;
           }
           if(num[b+i]>num[b+i+j+1]) //注意不能等于
           {
               num[b+i]=-1;
               count++;
               b=-1;       //重新比较
               i=0;
               j=0;
               for(int f=0;f<17;f++)
               {    
                   if(num[f]!=-1)    
                       cout<<num[f]<<" ";
               }
               cout<<endl;
           }
           
           
           b++;
       }
   }
   
   
   
   
   while (count<a)
   {    
       
       int max;
       
       for(int c=0;c<10;c++)
       {
           if (max<num[c])
               max=num[c];
       }
       for(int d=0;d<17;d++)
       {
           if(num[c]==max) // 也许最大值有相同的2个,消除最前面一个就可以
               num[c]=-1;
       }
       for(int f=0;f<10;f++)
               {    
                   if(num[f]!=-1)    
                       cout<<num[f]<<" ";
               }
               cout<<endl;
       count++;
   }
   
   
}
VC6.0下编译通过,以前做的题目,编的可能有点乱。
离线bobcoc
只看该作者 2 发表于: 2007-11-21
删除规则为:
从左到右扫描,第一次扫到比下一个大的数字则删除之。
例如:23576。。。。。
扫描过程为:
2<3,不删除2
3<5,不删除3
5<7,不删除5
7>6,删除7,即第一次应该删除7,得到:2356......
重复这个过程S次,得到结果。
离线yonghu86cs
只看该作者 3 发表于: 2008-02-23
。。。
离线xiayu1993
只看该作者 4 发表于: 2008-04-02
……晕,这题是明显的贪心吧?
离线cpp_stu2!
只看该作者 5 发表于: 2008-10-21
#include<iostream>
#include<string>
using namespace std;
int main (void){
    string s;
    int n;
    cin>>s;
    cin>>n;
    for (int i=0;i<n;++i){
        int pos=0;
        while (pos<s.size()-1&&s[pos]<=s[pos+1])++pos;
        s.erase(pos,1);
    }
    while (s.size()>1&&s[0]=='0')
          s.erase(0,1);
    cout<<s;
    while(1);
    return 0;
}
快速回复
限100 字节
 
上一个 下一个