1. 程式人生 > >第七屆藍橋杯大賽個人賽省賽C++ A組 題解+原題 (填空題)

第七屆藍橋杯大賽個人賽省賽C++ A組 題解+原題 (填空題)

#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,只要控制好判斷條件就可以了。。。