找到出現次數最多的數並輸出次數
阿新 • • 發佈:2018-11-27
找到出現次數最多的數並輸出次數
1.輸入n 表示輸入數字的個數
2.接下來輸入n 個數
數之間分割用逗號分割
要求是找出這n個數中出現最多次數的數,和出現的次數
#include "stdio.h" #include "malloc.h" /* 1.C語言沒有C++的動態陣列,有事可以用動態陣列代替 2.在括號中不要複製(int i=0),這要在cpp檔案中能編譯過,但是在.c檔案中就不能編譯過 3.在指標面前一定要不要處於有利狀態,因為這樣會報錯,不易檢查 */ void handle_input_number(int num); int is_find_number(int num); /* c語言沒有動態陣列這個概念,但是可以用連結串列實現 */ struct MyNumber{ int num_name; int num_count; MyNumber* next; }; MyNumber result_number={-1,-1,NULL}; MyNumber* head=NULL; MyNumber* tail=NULL; int main(int argc,char* argv[]){ int num=0; int n; scanf("%d",&n); for(int i=0;i<n;i++){ int input_number; scanf("%d",&input_number); handle_input_number(input_number); } printf("This most number is %d\nIt has %d\n",result_number.num_name,result_number.num_count); return 0; } void handle_input_number(int num){ if(is_find_number(num)==0){ MyNumber* add_MyNumber=(MyNumber*) malloc(sizeof(MyNumber)); add_MyNumber->num_name=num; add_MyNumber->num_count=1; add_MyNumber->next=NULL;//加上這句之後就不報錯了 //add This is the first time to update the result_number if(head==NULL){ result_number.num_name=num; result_number.num_count=1; head=tail=add_MyNumber; }else{ printf("..............."); tail->next=add_MyNumber; printf("..............."); tail=add_MyNumber; } } } int is_find_number(int num){ MyNumber* p=head; while(p!=NULL){ if(p->num_name==num){ //num_count++,this can help to cut down caumulate times. p->num_count++; //更新 result_number if(p->num_count>result_number.num_count){ result_number.num_name=p->num_name; result_number.num_count=p->num_count; } break; return 1; }else{ p=p->next; } } return 0; }