最小組合數字【貪心+排序】
Description
給一個N位的正整數,該數不包含前導0,先讓你調整其中每個數字的位置,得到另一個n位的數,並且使得這個數越小越好,而且這個數不能包含前導0。比如543210可以變成102345,而12345保持不變才是最優結果。
Input
第一行一個整數T(T<=100),表示有T組資料。
每組資料先輸入一行一個整數N(1<=N<=100),表示位數,接下來一行輸入一個N位的不包含前導0的正整數。
Output
每組資料對應一行輸出,即調整數字位置後能得到的最小的不包含前導0的數。
Sample Input
3 6 543210 3 123 3 231Sample Output
102345 123 123這道題看似複雜,實際用貪心考慮並不複雜,把一串數字重新組合成一個數字,要求數字最小,那麼就肯定要小的數在前,大的數在後,這個只需要排下序就可以了,但是還不夠,因為一個有效的數字,不能以 0 開頭,所以由貪心的思想,我們從最小的開始遍歷,找到不為 0 的數,然後和首位進行交換,得到的一定是最小的數,因為第一位肯定會被換掉,只能換個次小且不為 0 的數,然後處理完之後,輸出字串.....
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int main() { int t,i,len; char x[1005]; scanf("%d",&t); while(t--) { int tp; scanf("%d%s",&len,x); sort(x,x+len);//字典序排序 if(x[0]=='0')//如果前面有零 { i=0; while(x[i]=='0')//遍歷查詢不為零的數下標 { ++i; } tp=x[i];x[i]=x[0];x[0]=tp;//交換 } printf("%s\n",x);//輸出字串 } return 0; }
相關推薦
最小組合數字【貪心+排序】
A - 第一題 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des
堆排序(最小堆)--【演算法導論】
堆排序的思想在堆排序(最大堆)已做說明,故不再贅述; 總之,思想就是首先進行建堆,由於這是最小堆,故而必須保證父節點都小於孩子節點,若不滿足條件,則進行調節; 最後進行堆排序,不斷將最小的提取出來,並對剩下的進行調節,使之滿足最小堆; 故而將最大堆中的判斷父節點與孩子大小部
【貪心+排序】排隊接水 luogu-1223
esp 貪心 人在 puts typedef getchar() 順序 getchar long 題目描述 有n個人在一個水龍頭前排隊接水,假如每個人接水的時間為Ti,請編程找出這n個人排隊的一種順序,使得n個人的平均等待時間最小。 分析 註意要開longlong AC代碼
算法56-----最小編輯代價【動態規劃】
狀態 tro 如果 for 字符串 技術 gin 給定 clas 一、題目:最小編輯代價 給定兩個字符串str1和str2,再給定三個整數ic,dc,rc,分別代表插入、刪除、替換一個字符的代價,返回將str1編輯成str2的最小代價。舉例:str1="abc" str
演算法56-----最小編輯代價【動態規劃】
一、題目:最小編輯代價 給定兩個字串str1和str2,再給定三個整數ic,dc,rc,分別代表插入、刪除、替換一個字元的代價,返回將str1編輯成str2的最小代價。舉例:str1="abc" str2="adc" ic=5 dc=3
poj 2069 Super Star 最小求覆蓋【爬山演算法】
題意:給定幾個點,要求覆蓋這些點的最小球半徑。(求到n個點的最大距離最小化的點 因為是單峰的所以可以用爬山演算法 主要是我的退火演算法板子精度達不到? //#include<bits/stdc++.h> #include <ios
hiho1576 子樹中的最小權值【dfs序】
題意:求以x為根的子樹中的最小權值 思路:dfs序,把樹轉化成一個序列,類似LCA中的轉化,記錄1棵子樹進去的時間戳和出去的時間戳。線段樹求區間最小值 #include<stdio.h> #include<iostream> #include&l
51nod-1065 最小正子段和 【貪心 + 思維】
記錄 n) 51nod nta cstring pla CA 找到 class N個整數組成的序列a[1],a[2],a[3],…,a[n],從中選出一個子序列(a[i],a[i+1],…a[j]),使這個子序列的和>0,並且這個和是所有和>0的
輸入一組整數,0結束輸入,之後輸出輸入的最大的和最小的整數.【思路】
cnblogs amp println system ack rgs int 輸入 != package com.ykmimi.new1; /** * 輸入一組整數,0結束輸入,之後輸出輸入的最大的和最小的整數. */ import java.util.Scanner
hdu 3007【最小圓覆蓋-隨機增量法】
names cpp dia printf include const n) shu ons #include<iostream> #include<cstdio> #include<cmath> #include<algorithm
最小割點【洛谷P1345】
傳送門:https://www.luogu.org/problemnew/show/P1345 最小割問題,大家應該聽說過,最大流最小割吧(沒聽說過的讀完這句話應該聽說了),既然要求最小割,那麼我們就直接dinic跑一下最大流就完事了。 有人要問了,你說的輕巧,我寫了dinic怎麼WA了??
最小費用流【洛谷P2053】
傳送門:https://www.luogu.org/problemnew/show/P2053 教練我想學數學建模。 網路流和最小費用流的題目不存在程式碼難度,程式碼不存在變形(目前來說是的,不知道是不是我沒做過對於模板修改的題目) 難度主要在於,你能看出來它是個網路流,並且還能正確的建
【劍指offer】把陣列排成最小的數【python】
題目描述 輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。 思路 使用排序的思想:如果3+321 > 321 + 3那麼說明321應該在3的前面,
最小代價問題【DP】
> Description 設有一個n×m(小於100)的方格(如圖所示),在方格中去掉某些點,方格中的數字代表距離(為小於100的數,如果為0表示去掉的點),試找出一條從A(左上角)到B(右下角)的路徑,經過的距離和為最小(此時稱為最小代價),從A出發的
陣列中的第K個最大元素 【LeetCode 排序】
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。 示例 1: 輸入: [3,2,1,5,6,4] 和 k = 2輸出: 5 示例 2: 輸入: [3,2,3,1,2,4,5,5,6] 和 k
最小二乘法【一】
最小二乘法(又稱***最小平方法***)是一種數學優化技術。它通過最小化誤差的平方和尋找資料的最佳函式匹配。利用最小二乘法可以簡便地求得未知的資料,並使得這些求得的資料與實際資料之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化
【二分圖】【找最大流、最小獨立集、匈牙利演算法】
Asteroids Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1
POJ 2069最小球覆蓋 HDU3007最小圓覆蓋【模擬淬火演算法】
POJ 2069最小球覆蓋 1.給定N個三維點,要求覆蓋這些點的最小球半徑; 2.採用模擬淬火演算法,隨機選取一個點作為初始解,然後不斷向當前最遠的點靠近; 3.這是一個不斷調整的過程,對應模擬淬火演算法中不斷向內能最低這一目標函式(半徑最小)逼近,溫度對應控制變數 對於一
leetcode:Minimum Depth of Binary Tree(樹的根節點到葉子節點的最小距離)【面試演算法題】
題目: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shortest path from the root node d
【最小乘積生成樹詳解】【BZOJ2395】
題意:設每個點有x,y兩個權值,求一棵生成樹,使得sigma(x[i])*sigma(y[i])最小。 設每棵生成樹為座標系上的一個點,sigma(x[i])為橫座標,sigma(y[i])為縱座標。 則問題轉化為求一個點,使得xy=k最小。即,使過這個點的反比例函