1. 程式人生 > >一組數字,求其能組成的最大數?

一組數字,求其能組成的最大數?

//一組正整數,求用這組正整數對應的數字字串連在一起能組成的最大數
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 20
#define MAXL MAXN*(10+1)
char ln[MAXL], *p;
unsigned int uis[MAXN];
int i, n, r;
int compare(const void *a, const void *b) {
char da[11], db[11], dab[21], dba[21];


sprintf(da, "%u", *(unsigned int *)a);
sprintf(db, "%u", *(unsigned int *)b);
sprintf(dab, "%s%s", da, db);
sprintf(dba, "%s%s", db, da);
return strcmp(dba, dab);
}
int main() {
fgets(ln, MAXL, stdin);
p = ln;
i = 0;
while (1) {
r = sscanf(p, "%u%n", &uis[i], &n);
if (1 == r) {
i++;
if (i >= MAXN) {
printf(">%d number is ignored.\n", MAXN);
break;
}
p += n;
}
else if (0 == r) {
p++;
}
else break;
}
n = i;
qsort(uis, n, sizeof(unsigned int), compare);
ln[0] = 0;
for (i = 0; i<n; i++) sprintf(ln, "%s%u", ln, uis[i]);
printf("%s\n", ln);
getchar();
return 0;

}

來自csdn一位版主,寫的很好!

相關推薦

數字組成大數

//一組正整數,求用這組正整數對應的數字字串連在一起能組成的最大數 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXN 20 #define MA

C語言產生數字並將寫入txt文件中

#include<stdio.h> /*產生一組連續的數字,並將其寫到txt文件中*/ /*說明:本程式在在win10 系統64位下用Dev-C++ 5.11版本編譯器編譯的*/int main(){ int m=1; FILE *fp=NULL; fp=fopen("D:\\1.txt","

輸入數字找出排列的小值

#include <iostream> using namespace std; void bubblesort(int a[], int x) {     int y, z;     for (y = 0; y <= x - 1; y++) {   

編寫程序從cin讀取輸出

cin stream sum num += pac 編寫 name while #include <iostream> using namespace std; int main() { int num, sum = 0; while (cin

判斷數字是否連續

int for clas lse ons static .so size class 1 public class Demo { 2 public static void main(String[] args) { 3 List list =

Python 輸入數字排序或找尋max或min值

思考:當我們輸入一串數字,使用什麼函式?排序使用什麼函式? 我使用的是Python 3 的input()函式,注意:input()函式的返回值始終是字串 如果我們輸入的是整數,我們需要int函式進行轉化,如果是浮點型,則使用float函式轉化。。。。 排序使用的是sort()函式,轉換時還使用了map(

給定任意正整數數字位數並順序、逆序輸出各位數字

{int i;if (n<=0){printf("NULL");}else if (n>0) {for ( i=1;(n/10)!=0;i++){n=n/10;           }return i;}}int main(){printf("%d\n",Several_digits(0));pr

【codeforces 691 D】【並查集 或者 dfs】aps in Permutation【給一個1到N的排列M個操作每次可以交換X Y位置上的數字可以得到的大字典序的數列】

題意: 給一個1到N的排列,M個操作(1<=N,M<=106),每個操作可以交換X Y位置上的數字,求可以得到的最大字典序的數列。 思路: 把位置分成若干塊,每一塊裡面的位置都是可以被

用xyz組成2個3位數並將相加成一個數字xyz

int x,y,x,i,result=520;      //可令result為隨機一個數字 for(i=100;i<=result;i++)  //次處為演算法靈魂之處   {     x=i%100;    //依次遞增1,遞增到10後變為0     y=i%100/10

給定個數某個子區間該區間和

#include<iostream> #include<vector> #include<iterator> #include<type_traits> #include<ctime> #include<ran

0059 給定一些值和一個要組成數字總的合數(遍歷解答樹)

如:有1分,2分,5分,10分四種硬幣,每種硬幣無限,給定Target分錢,求多少種組合可以合成Target分錢? // ShangJi.cpp : 定義控制檯應用程式的入口點。 #include

java中將人分兩重…

初學者建議看第一種方法!第二種比較全,運用迭代,比較燒腦 第一種方法:自己寫的! sample.org.exercisejava.util.Arraysjava.util.Scannerp

數字組成大整數三種解法

整理一下網上關於這道題和自己關於這道題的解法 方法一: 利用a+b和b+a進行比較選擇其中數值較大的組合方式 public class Solution { public void m

Leetcode 213. House Robber II -打家劫舍每家都有一定數量的錢多家組成一個圓形首尾相鄰偷盜相鄰的兩家可偷盜的大金額

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed. All houses at this place are&

對於一個m行m列的方陣每一行列及主對稱線元素之和最後按照從大到小的順序依次輸出。

#include<iostream> using namespace std; #define MAX 10 int main() { int m,n=0,i,j,a[10][10],sum,num[10],temp,max; cout<<"en

動態建立按鈕併為繫結變數引數事件方法

做專案時,遇到一個比較奇怪的需求,需要用highChart作圖,但是由於橫座標是公司的部分職級的人員,且人員數目較多,這樣就會造成作出來的圖好長, 在有限的螢幕上顯示不全。於是客戶要求,可以將所有人員根

個數 連續幾個數的大值及其變種

import java.util.Arrays; import java.util.Scanner; public class KeShui { public static int max = 0; //網易瞌睡 public static void maxiva