第七屆藍橋杯大賽個人賽省賽C++ A組 題解+原題 (填空題)
阿新 • • 發佈:2018-12-22
#include <stdio.h> void swap(int a[], int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } int partition(int a[], int p, int r) { int i = p; int j = r + 1; int x = a[p]; while(1){ while(i<r && a[++i]<x); while(a[--j]>x); if(i>=j) break; swap(a,i,j); } ______________________; return j; } void quicksort(int a[], int p, int r) { if(p<r){ int q = partition(a,p,r); quicksort(a,p,q-1); quicksort(a,q+1,r); } } int main() { int i; int a[] = {5,13,6,24,2,8,19,27,6,12,1,17}; int N = 12; quicksort(a, 0, N-1); for(i=0; i<N; i++) printf("%d ", a[i]); printf("\n"); return 0; }
注意:只填寫缺少的內容,不要書寫任何題面已有程式碼或說明性文字。
答案:swap(a,i,j);
5. 消除尾一
下面的程式碼把一個整數的二進位制表示的最右邊的連續的1全部變成0
如果最後一位是0,則原數字保持不變。
如果採用程式碼中的測試資料,應該輸出:
00000000000000000000000001100111 00000000000000000000000001100000
00000000000000000000000000001100 00000000000000000000000000001100
請仔細閱讀程式,填寫劃線部分缺少的程式碼。
#include <stdio.h> void f(int x) { int i; for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1); printf(" "); x = _______________________; for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1); printf("\n"); } int main() { f(103); f(12); return 0; }
注意:只填寫缺少的內容,不要書寫任何題面已有程式碼或說明性文字。
答案:x&(x+1)
6. 寒假作業
現在小學的數學題目也不是那麼好玩的。
看看這個寒假作業:
□+ □ = □
□- □ = □
□× □ = □
□÷ □ = □
(如果顯示不出來,可以參見【圖1.jpg】)
每個方塊代表1~13中的某一個數字,但不能重複。
比如:
6 + 7 =13
9 - 8 =1
3 * 4 =12
10 /2 = 5
以及:
7 + 6 =13
9 - 8 =1
3 * 4 =12
10 /2 = 5
就算兩種解法。(加法,乘法交換律後算不同的方案)
你一共找到了多少種方案?
請填寫表示方案數目的整數。
注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。
答案:64
解題思路:這題和第三題一樣的,可以暴力也可以dfs,只要控制好判斷條件就可以了。。。