首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

HDU ACM Steps 經典題目解析:找禮物與數字排序

     編輯:關於C語言

題目一:Find Your Present (HDU 1003?)

問題:N 個禮物卡號,只有一個號碼出現奇數次,其餘皆為偶數次。找出該號碼。

解法:異或運算交換律 a ^ a = 0, a ^ 0 = a,所有數異或後即為目標。

#include <stdio.h>
int main() {
    int n, x, res;
    while (scanf("%d", &n) && n) {
        res = 0;
        for (int i = 0; i < n; ++i) {
            scanf("%d", &x);
            res ^= x;
        }
        printf("%d\n", res);
    }
    return 0;
}

題目二:排序 (HDU 1008?)

問題:輸入一串數字,將 '5' 視為分隔符,分割得到非負整數(忽略前導 0,全 0 則為 0),由小到大排序輸出。

關鍵處理:連續 '5' 產生空字串需忽略;輸入結尾無 '5' 也要處理最後一段。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int cmp(const void *a, const void *b) { return *(int*)a - *(int*)b; }

int main() {
    char s[1005];
    while (scanf("%s", s) == 1) {
        int a[1005], k = 0;
        long long val = 0;
        int inNum = 0;
        for (int i = 0; s[i]; ++i) {
            if (s[i] == '5') {
                if (inNum) a[k++] = val, val = 0, inNum = 0;
            } else {
                val = val * 10 + (s[i] - '0');
                inNum = 1;
            }
        }
        if (inNum) a[k++] = val;
        qsort(a, k, sizeof(int), cmp);
        for (int i = 0; i < k; ++i) {
            if (i) putchar(' ');
            printf("%d", a[i]);
        }
        puts("");
    }
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved