恒生电子笔试题
请对输入的一组数据(0~9)进行排序,规则:数据出现次数多的,数字大的排在前面。
例如:6 3 9 4 排序后:9 6 4 3
例如:6 3 3 9 4 排序后:3 9 6 4
[解决办法]
我一大神同学想出来的,开数组int a[10];然后,每出现一次该数,该位加10,然后随便用个排序法排序后,取10余输出即可。
[解决办法]
论坛里有:
http://topic.csdn.net/u/20121018/20/0ab1305d-9378-48b6-b5d2-884f46d97dc7.html?36066
[解决办法]
// Map.cpp : Defines the entry point for the console application.//#include "stdafx.h"typedef struct{ int Myself; int Record;}HS;void select_sort(int *x, int n){ int i, j, min, t; for (i=0; i<n-1; i++) /*要选择的次数:0~n-2共n-1次*/ { min = i; /*假设当前下标为i的数最小,比较后再调整*/ for (j=i+1; j<n; j++)/*循环找出最小的数的下标是哪个*/ { if (*(x+j) < *(x+min)) { min = j; /*如果后面的数比前面的小,则记下它的下标*/ } } if (min != i) /*如果min在循环中改变了,就需要交换数据*/ { t = *(x+i); *(x+i) = *(x+min); *(x+min) = t; } }};int main(int argc, char* argv[]){ HS H_S[10]; int Temp,i=0,HW[10]={0}; for(i=0;i<10;i++) { H_S[i].Myself=i; H_S[i].Record=0; } printf("请输入5个0-9之间的数字:"); for (int m=0;m<5;m++) { scanf("%d",&Temp); switch(Temp) { case 0: H_S[0].Record++; break; case 1: H_S[1].Record++; break; case 2: H_S[2].Record++; break; case 3: H_S[3].Record++; break; case 4: H_S[4].Record++; break; case 5: H_S[5].Record++; break; case 6: H_S[6].Record++; break; case 7: H_S[7].Record++; break; case 8: H_S[8].Record++; break; case 9: H_S[9].Record++; break; } } Temp=0; for (i=0;i<10;i++) { if (H_S[i].Record==0) continue; else { HW[Temp]=H_S[i].Record*10+H_S[i].Myself; Temp++; } } select_sort(HW, Temp); for(i=Temp-1;i>-1;i--) { printf("%d",(HW[i]%10)); } return 0;}
[解决办法]
这个相当于是2级排序,就是说
struct
{
int number;
int times;
};
就是先排序times,如果times相同在按照number的大小排序。
用qsort可以做到。
baidu qsort ACM
[解决办法]
#include <stdio.h>typedef struct _Digit{ int num; int cnt;} Digit;void sort(Digit *d){ int i, j; Digit t; for(i = 0; i < 10 - 1; ++i) for(j = 0; j < 10 - i - 1; ++j){ if(d[j].cnt < d[j+1].cnt || (d[j].cnt == d[j+1].cnt && d[j].num < d[j+1].num)){ t = d[j]; d[j] = d[j+1]; d[j+1] = t; } }}int main() { Digit digit[10]; int i; for(i = 0; i < 10; ++i){ digit[i].num = i; digit[i].cnt = 0; } int n, num; scanf("%d", &n); while(n > 0){ scanf("%d", &num); digit[num].cnt++; --n; } sort(digit); for(i = 0; i < 10; ++i) if(digit[i].cnt) printf("%d ", digit[i].num); return 0;}