题目:
第一行有一个整数,表示数字个数 n。
第二行有n个整数,表示给出的n个整数 Aio
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1 复制 输出 #1 复制
34331213
13 312 343
输入 #2 复制 输出 #2 复制
7424613
7 13 4 246设有n个正整数a1...An,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有n个整数,表示给出的n个整数 Aio
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1 复制 输出 #1 复制
34331213
13 312 343
输入 #2 复制 输出 #2 复制
7424613
7 13 4 246
思路:
一、循环
代码:
#include#include void arr_1(int a[],int n) { int k,i,t,num=0,m=0; int p[10]={0}; for(int j=0;j 0) { p[i]=p[i]/10; num++; } while((p[i+1]/10)>0) { p[i+1]=p[i+1]/10; m++; } while(p[i]==p[i+1]) { p[i]=a[i]-p[i]*pow(10,num); p[i+1]=a[i+1]-p[i+1]*pow(10,m); num=0;m=0; while((p[i]/10)>0) { p[i]=p[i]/10; num++; } while((p[i+1]/10)>0) { p[i+1]=p[i+1]/10; m++; } } if(p[i] 1) { arr_1(a,n); n--; } } int main() { int a[10]={0}; int n; scanf("%d",&n); int i; for(i=0;i
二、for语句
代码:
void pin(int*arr) { int a, b, c, m, n, k, t,i; int* p = arr; for (i = 0; i < 20; i++) { if ((arr[i] != 0) && (arr[i + 1] != 0)) { if (10 > arr[i] && arr[i] > 0) { a = arr[i]; } if (100 > arr[i] && arr[i] >= 10) { a = arr[i] / 10; b = arr[i] % 10; } if (1000 > arr[i] && arr[i] > +100) { a = arr[i] / 100; c = arr[i] % 10; b = ((arr[i] - c) / 10) % 10; } if (10 > arr[i + 1] && arr[i + 1] > 0) { m = arr[i + 1]; } if (100 > arr[i + 1] && arr[i + 1] >= 10) { m = arr[i + 1] / 10; n = arr[i + 1] % 10; } if (1000 > arr[i + 1] && arr[i + 1] > +100) { m = arr[i + 1] / 100; k = arr[i + 1] % 10; n = (arr[i + 1] / 10) % 10; } if (a > m) { t = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = t; } if ((m == a) && (b > n)) { t = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = t; } if ((m == a) && (b == n) && (k < c)) { t = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = t; } } } } int main() { int x=0,i; printf("please input the number of : "); scanf("%d", &x); int arr[20]; for (i = 19; i >= 0; i--) { arr[i] = 0; } for (i = 0; i < x; i++) { scanf("%d", &arr[i]); } pin(arr); for (i = 19; i >= 0; i--) { if (arr[i] != 0) { printf("%d", arr[i]); } } }



