程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 1410142236-ny-尋找最大數

1410142236-ny-尋找最大數

編輯:C++入門知識

1410142236-ny-尋找最大數


尋找最大數

時間限制:1000 ms | 內存限制:65535 KB 難度:2
描述

請在整數 n 中刪除m個數字, 使得余下的數字按原次序組成的新數最大,

比如當n=92081346718538,m=10時,則新的最大數是9888

輸入第一行輸入一個正整數T,表示有T組測試數據
每組測試數據占一行,每行有兩個數n,m(n可能是一個很大的整數,但其位數不超過100位,並且保證數據首位非0,m小於整數n的位數)輸出每組測試數據的輸出占一行,輸出剩余的數字按原次序組成的最大新數樣例輸入
2
92081346718538 10
1008908 5
樣例輸出
9888
98
錯誤原因 例14593 3 按照我的程序走是輸出59,可實際上的是93
我保證了留下的數字都是最大的,但是其值不一定是最大的。錯誤代碼
#include
#include
char num[110];
int s[12];
int main()
{
	int t,m;
	int i,j,k;
	int len;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		scanf("%s %d",num,&m);
		getchar();
		len=strlen(num);
		memset(s,0,sizeof(s));
		for(i=0;i


解題思路

由於只能從給定的數字中刪掉確定數目的數字,每位數字之間不允許交換,所以先考慮最大數字的特點,即盡量讓大數在高位。

給定數字為一個N位數,刪掉其中M位(M<=N),使得到的(N-M)位數的值盡可能大。其實也就是從一個N位數中取出(N-M)個數,使得到的數盡量大。

按照上述的兩個思想,就是說,取每一位數時,從給定數中都要取最大的數。這樣,取數的過程中保證每一位都是最大,這樣結果也必然是最大的。

下面舉例說明:

從source_number:105789中刪去3位數,所得數字放在result_num中。

先從source_number取得result_num的第一位(按從左往右記數)。

數位: 1 2 3 4 5 6

Source_num:1 0 5 7 8 9

第一步:取得7,之後source_num變為89。只能從source_num的前4位(length_source –fetch_num + 1,length_source為源數的長度,fetch_num為取數的個數)中取,這樣不會導致取數之後,剩余的數字不夠取的情況。

第二步:取得8,source_num變為9。

第三步:取得9,結束。

Result_num為:789。

代碼

#include
#include
char s[110],num[110];
int main()
{
	int t,n;
	int i,j,k,l,len,a,m;
	char max;
	scanf("%d",&t);
	getchar();
	while(t--)
	{
		scanf("%s%d",s,&n);
		len=strlen(s);
		k=len-n;//要留下的位數 
		m=len-k+1;//每次截止的地方 
		l=0;
		a=0;//每次開始的地方 
		for(i=0;i


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved