1. 程式人生 > >Day One 水題

Day One 水題

三角形

HDU 2039 http://acm.hdu.edu.cn/showproblem.php?pid=2039

給定三條邊,請你判斷一下能不能組成一個三角形。
Input
輸入資料第一行包含一個數M,接下有M行,每行一個例項,包含三個正數A,B,C。其中A,B,C <1000;
Output
對於每個測試例項,如果三條邊長A,B,C能組成三角形的話,輸出YES,否則NO。
Sample Input
2
1 2 3
2 2 2
Sample Output
NO
YES

一道學c語言就練過的一道題;總結一下程式碼總是通過不了的幾點(坑點):


1、邊長錯用int型別,題目中輸入只說三個正數,沒有說整數,所以邊長應為double型變數;
2、判斷三邊是否能組成一個三角形只看三邊是否滿足任意兩邊之和大於第三邊的條件,在這裡不用判斷三邊是否都大於0,因為題目中說了是正數(有時候根據題目可以避免考慮一些沒必要考慮的輸入範圍);
3、輸入用“%lf”,接收double型變數;
4、這一點非常重要,輸出要求是全大寫的“YES”和“NO”,所以你輸出只能是全大寫的,如果是全小寫或者首字母大寫都算結果錯誤,真的對於剛接觸的人要特別注意,容易在這一點上犯渾。

#include <stdio.h>  
int main(){  
    double a, b, c;  
    int
z; scanf("%d", &z); while ( z-- ){ scanf("%lf%lf%lf", &a, &b, &c); printf("%s\n", a+b>c && a+c>b && b+c>a ? "YES" : "NO"); } return 0; }

空心三角形

HDU 2091 http://acm.hdu.edu.cn/showproblem.php?pid=2091

把一個字元三角形掏空,就能節省材料成本,減輕重量,但關鍵是為了追求另一種視覺效果。在設計的過程中,需要給出各種花紋的材料和大小尺寸的三角形樣板,通過電腦臨時做出來,以便看看效果。
Input
每行包含一個字元和一個整數n

(0<n<41) ,不同的字元表示不同的花紋,整數n表示等腰三角形的高。顯然其底邊長為2n-1。如果遇到@字元,則表示所做出來的樣板三角形已經夠了。
Output
每個樣板三角形之間應空上一行,三角形的中間為空。顯然行末沒有多餘的空格。

看上去很簡單,還是講講自己遇到的一些問題:
1、利用畫圖找出每行空格個數與列印字元位置的規律,然後就用最暴力的方法每一行打印出來;
2、但是提交的時候出現瞭如下錯誤:Presentation Error 介紹錯誤,就在網上查該錯誤的原因–首先可以肯定的是,思路沒有錯,輸出結果也與標準輸出結果非!常!接!近!出現這個錯誤最可能的原因是,在輸出結果的後面,多了或少了沒什麼意義的空格,tab,換行符等等。所以,請先認真檢查程式的輸出結果是否與標準完!全!一!致!OJ平臺對格式的檢查可以說是非!常!嚴!格!但是自己檢查了輸出覺得沒問題或者說不知道問題出在哪裡

錯誤程式碼如下:

#include<stdio.h>

int main(){
    int n,i,j;
    char x;
    scanf("%c",&x);
    while(x != '@'){
        scanf("%d",&n);        //表示等腰三角形的高
        for(i = 1;i < n;i++){
            j = n-i;
            while(j--){        //第i行列印n-i個空格
                printf(" ");
            }
            printf("%c",x);    //列印c字元
            j = 2*i-3;
            if(i > 1){         //第一行為特殊情況,需單獨考慮
                while(j--){        //再列印2*i-3個空格
                    printf(" ");
                }
                printf("%c",x);  //列印c字元
            }
            printf("\n");
        }
        j = 2*n-1;       //底邊長為2n-1
        while(j--){
            printf("%c",x);
        }
        printf("\n");
        scanf("%c",&x);
    }
    return 0;
}

這是通過測試的程式碼,把輸入輸出都用cin和cout來實現,然後用了setw(n)這個方法,AC的程式碼比之前暴力輸出的要簡單美觀得多。所以說自己也應該多瞭解並熟練使用一些函式方法,往往可以達到事半功倍的效果

setw(n) //標頭檔案 #include<iomanip> 設定寬度 左對齊
setprecision(n)//設定浮點數字個數
#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    char a;
    int n,flag=0,i,s=1,j,k;
    while(cin>>a && a!='@'){ 
        cin>>n; 
        flag++;
        k = n;
        if(flag != 1) 
            cout<<endl;
        cout<<setw(n)<<a<<endl;   //第一行
        if(n != 1){
            for(j = 2;n != 2;n--){
                cout<<setw(n-1)<<a<<setw(j)<<a<<endl;
                j += 2;
            }
        for(i = 0;i< 2*k-1;i++)   //最後一行
            cout<<a;cout<<endl;
        }
    }
    return 0;
}

整數解

HDU 2092 http://acm.hdu.edu.cn/showproblem.php?pid=2092

有二個整數,它們加起來等於某個整數,乘起來又等於另一個整數,它們到底是真還是假,也就是這種整數到底存不存在,實在有點吃不準,你能快速回答嗎?看來只能通過程式設計。
例如:
x + y = 9,x * y = 15 ? 找不到這樣的整數x和y
1+4=5,1*4=4,所以,加起來等於5,乘起來等於4的二個整數為1和4
7+(-8)=-1,7*(-8)=-56,所以,加起來等於-1,乘起來等於-56的二個整數為7和-8
Input
輸入資料為成對出現的整數n,m 10000<n,m<10000 ,它們分別表示整數的和與積,如果兩者都為0,則輸入結束。
Output
只需要對於每個n和m,輸出“Yes”或者“No”,明確有還是沒有這種整數就行了。
Sample Input
9 15
5 4
1 -56
0 0
Sample Output
No
Yes
Yes

1、利用暴力列舉法來判斷是否存在這樣的整數,在判斷時要注意輸入的資料可正可負,要加絕對值判斷大小,還有要注意負負得正->if(y/i + i == x || y/(-i) + (-i) == x);
2、嚴格按照題目要求來標準輸入和輸出,同時注意題目輸入結束的條件!

#include<stdio.h>
#include<math.h>
int f(int x,int y){  //判斷是否存在滿足要求的整數對
    int i;
    for(i = 1;i <= abs(y);i++){
        if(abs(y)%i == 0){
            if(y/i + i == x || y/(-i) + (-i) == x)
            return 1;
        }
    }
    return 0;
}
int main(){
    int x,y;
    scanf("%d%d",&x,&y);
    while(!(x == 0 && y == 0)){
        if(f(x,y) == 1){
            printf("Yes\n");
        }
        else{
            printf("No\n");
        }
        scanf("%d%d",&x,&y);
    }
    return 0;   
}

Olympiad

HDU 5327 http://acm.hdu.edu.cn/showproblem.php?pid=5327

You are one of the competitors of the Olympiad in numbers. The problem of this year relates to beatiful numbers. One integer is called beautiful if and only if all of its digitals are different (i.e. 12345 is beautiful, 11 is not beautiful and 100 is not beautiful). Every time you are asked to count how many beautiful numbers there are in the interval [a,b] (a≤b). Please be fast to get the gold medal!

Input
The first line of the input is a single integer T (T≤1000), indicating the number of testcases.

For each test case, there are two numbers a and b, as described in the statement. It is guaranteed that 1≤a≤b≤100000.

Output
For each testcase, print one line indicating the answer.

Sample Input
2
1 10
1 1000
Sample Output
10
738

講真英文題不能每次都靠百度。題目是說當一個整數所有位置上的數字都不相同時則為漂亮數,現在給你一個區間,求出該區間內有多少漂亮數
判斷一個整數是否每位數字都不相同:設定一個計數標誌陣列,表示每位數字出現的次數,利用除10取餘依次取出該數字的最低位,在計數陣列相應位置+1,如果某數字出現次數大於1,則不是漂亮數

#include<stdio.h>

int f(int a,int b){
    int i,n,count = b-a+1;
    for(i = a;i <= b;i++){     //掃描
        int flag[10] = {0};        //初始化為0
        n = i;
        while(n){
            flag[n%10] = flag[n%10]+1;       //標誌位加一
            if(flag[n%10] > 1){ //不是漂亮數
               count--;
               break;
            }
            n /= 10;
        }
    }
    return count;
}

int main(){
    int t,i,a,b;
    scanf("%d",&t);
    for(i = 0;i < t;i++){
        scanf("%d%d",&a,&b);
        printf("%d\n",f(a,b));
    }
    return 0;
}

雞兔同籠

OpenJ_Bailian 2750 http://bailian.openjudge.cn/practice/2750?lang=en_US

一個籠子裡面關了雞和兔子(雞有2只腳,兔子有4只腳,沒有例外)。已經知道了籠子裡面腳的總數a,問籠子裡面至少有多少隻動物,至多有多少隻動物。
Input
一行,一個正整數a (a < 32768)。
Output
一行,包含兩個正整數,第一個是最少的動物數,第二個是最多的動物數,兩個正整數用一個空格分開。
如果沒有滿足要求的答案,則輸出兩個0,中間用一個空格分開。
Sample Input
20
Sample Output
5 10

最少的動物數 = 兔子儘可能地多 =max{全是兔子,全是兔子+一隻雞};
最多的動物數 = 全是雞

include <stdio.h>

int max(int a){
    return a/2;
}
int min(int a){
    if(a%4 == 0){
        return a/4;
    }
    else{
        return (a-2)/4+1;
    }
}

int main(){
    int a,mina,maxa;
    scanf("%d",&a);
    if(a%2 == 0){
        mina = min(a);
        maxa = max(a);
        if(mina <= maxa){
            printf("%d %d\n",mina,maxa);
            return 0;
        }
    }
    printf("%d %d\n",0,0);
    return 0;
}

第一天的部落格拖到第二週才完成~~現在感覺題目是比較水,但是我相信當時做題的時候肯定也出現了很多坑