程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 4727 The Number Off of FFF(2013年成都邀請賽)

HDU 4727 The Number Off of FFF(2013年成都邀請賽)

編輯:C++入門知識

題目大意:   有一列士兵順序報號(依次加一),如果是正確報數,應該依次加一,從左向右(即1,2,3……X);   現在我們從原始隊伍中抽取一個連續的隊列,這裡有N個士兵。換句話就是,我們有N個士兵一次編號在A到A+N-1之間(1 <= A <= A+N-1 <= X),但是我們不知道A數字的大小,然而我們確定這個隊列是按照原始隊伍從左到右有序排列的。我們確定這N個士兵中只有一個人報號錯誤,現在就要找到這個士兵。   輸入 2 3 1 2 4 3 1001 1002 1004     輸出 Case #1: 3 Case #2: 3   解析:         很容易看出來,我們的任務就是找出犯錯士兵在第一位。         如果這位士兵犯錯的話,那他報的號碼減去前一個號碼不是1(即a[k] - a[k-1] != 1)。而其他士兵是不會犯錯的,即a[i] - a[i-1]==0(i != k)。   易錯點:   1.很容易當成是大數,開始想復雜的運算,實踐證明用int就足夠了;   2.假如抽出的N個士兵第一個就報錯誤的話,我們得單獨考慮,所以可以初始化錯誤的人是p = 1;       代碼:

#include <stdio.h>
#include <stdlib.h>
int a[100005];
int main(){
    int T,tt = 0;
    int i,j,k,n,p;
    scanf("%d", &T);

    while(T--){
        scanf("%d", &n);
        for(i = 1; i<=n; i++)
            scanf("%d", &a[i]);
        p = 1;                 //這個初始化,可以標記是第一個士兵就報錯的情況
        for(i = 2; i<=n; i++)
            if(a[i]!=a[i-1]+1){
              p = i;
              break;
            }
        printf("Case #%d: %d\n", ++tt, p);
    }
    return 0;
}

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved