一
/*
求解a^b的最后三位數思路:二分法和遞歸的結合使用,只要后三位,所以只留后三位一定是正確的。所以int類型就可以。*/
將b的數分情況考慮:
當 b == 0時,返回 1
當 b == 1時候, 返回 或者 a <= 1時候返回 a %1000,此時如果 a小于等于1的話
當 b == 2時候, 返回 a*a %1000
當 b 大于等于三時候,分兩種情況
當 b為奇數和b為偶數時候,根據公式 a^b = (a^(b/2))^2進行遞歸
代碼:
int getNumber(int a, int b){ if(b == 0) return 1; else if(a <= 1 || b == 1){ return a%1000; }else if(b == 2){ return a*a%1000; }else if(b & 0x01 == 1)//此時 b 大于等于 3 且是奇數 { return((getNumber(getNumber(a, b/2), 2)*a) % 1000); // a^3 = a*a^2 }else{ return ((getNumber(getNumber(a, b/2), 2)) % 1000); }}二馬桶排序/* 馬桶排序: 特點:數組的下標是該數字,數組的元素是該數字出現的頻率。 可以將待排序的數字看成是馬桶,在里面進行插旗運算。*/void sort(int *score, int n){ int newScore[9] = {0}; int i = 0; int j = 0; for(i = 0; i < 5; i++){ newScore[score[i]]++; } for(i = 0; i < 9; i++){ if(newScore[i] != 0){ for(j = 0; j < newScore[i]; j++){//數組元素是數字出現的頻率 PRintf("%d ", i);//下標是真實出現的數字 } } }}三冒泡排序
/* 冒泡排序: 5個數字進行排序,第一趟比較這個五個數字,并且比較的時候進行交換。 第一趟選出最小的數字放到最高位。 第二趟從前四個數字選出最小的位置,放到了第四位。 第三趟就是從前三個數字選出最小的,放到了第三位。 第四趟就是.......................,放到了第二位。 外循環控制要遍歷數組的次數,內循環控制比較數組起始位置和比較次數。時間復雜度: o(n^2)*/void sort(int *a, int n){ int i = 0; int j = 0; int temp = 0; for(i = 0; i < n-1; i++){ for(j = 0; j < n-1-i; j++){ if(a[j] > a[j+1]){ temp = a[j]; a[j] = a[j+1]; a[j+1] =temp; } } }}四:快速排序
/* 快速排序: 首先定義基準變量為temp = a[0]; 一次快速排序的過程:首先確定 left < right 然后定義左側的數字為基準數,int temp = a[left]; 假設從小到大比較,則基準數左側要小于基準數,基準數右側的數,大于基準數。 首先每次一定要從基數的對面開始,假設J是基數的對面,i是奇數,則如果a[j] >= temp,執行j-- 就是找到一個小于基數的,這個數字不應該放在基數的對側,應該放在同側。 然后在基數的同側找一個比基數大的數字,這個數字不應該在基數的同側。 然后進行交換,最后當 i == j 的時候,這個數組已經被遍歷完成,此時將基數放在中間。 對基數左側的數字進行上述過程。 對基數右側的數字進行上述過程。*/void quickSort(int *a, int left, int right){ int temp; //基準數 int t;//交換的時候使用 int i = left;//記錄基數同側的數 int j = right;//記錄基數對側的數 if(left > right) return;//遞歸結束條件 temp = a[i];//左側是基準值 while(i != j)//進行一次快速排序的過程,結束條件是 i , j { //每次先從基準數的對側開始,要就找出小于 基準數的 while(temp <= a[j] && i < j){ j--; } while(temp >= a[i] && i < j){ i++; } if(i != j){ t = a[i]; a[i] = a[j]; a[j] = t; } } //一次完成后將基數歸位 a[left] = a[i]; a[i] = temp; quickSort(a, left, i-1);//從基數左側開始排序。 quickSort(a, i+1, right);//從基數右側的開始排序。}
新聞熱點
疑難解答