iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
自我挑戰組

用 C & C++ 帶你手把手解 UVa 一顆星選集系列 第 14

Day 0xE UVa10812 Beat the Spread!

題意

  • 輸入比賽的分數總和及分差,輸出兩隊分數
  • 需要注意的有:
    1. 第一行輸入整數 n 代表測資數
    2. 每筆測資一行,總和 s 和分差 d
    3. 如果不可能就輸出 impossible

解法

  • 輸入測資數 n 後,用 for 迴圈重複讀入每筆測資 sn
    int n;
    int i;
    int s, d;
    
    scanf("%d", &n);
    
    for(i = 0; i < n; i++){
        scanf("%d %d", &s, &d);
        ...
    }
    
  • 用簡單的聯立方程式可以得到以下過程:
    • 設兩隊得分為 ab
    1. https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cleft%5C%7B%20%20%20%20%20%20%20%20%20%20%20%20%5Cbegin%7Barray%7D%7Bc%7D%20%20%20%20%20%20%20%20%20%20%20%20%20a%20%2B%20b%20%3D%20s%20%5C%5C%20%20%20%20%20%20%20%20%20%20%20%20%20%20a%20-%20b%20%3D%20d%20%20%20%20%20%20%20%20%20%20%20%5Cend%7Barray%7D%20%20%20%20%20%20%20%5Cright.%24%20
    2. https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cleft%5C%7B%20%20%20%20%20%20%20%20%20%20%20%20%5Cbegin%7Barray%7D%7Bc%7D%20%20%20%20%20%20%20%20%20%20%20%20%202a%20%3D%20s%20%2B%20d%20%5C%5C%20%20%20%20%20%20%20%20%20%20%20%20%20%202b%20%3D%20s%20-%20d%20%20%20%20%20%20%20%20%20%20%20%5Cend%7Barray%7D%20%20%20%20%20%20%20%5Cright.%24
    3. a = https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cfrac%7Bs%20%2B%20d%7D%7B2%7D%24 & b = https://chart.googleapis.com/chart?cht=tx&chl=%24%5Cfrac%7Bs%20-%20d%7D%7B2%7D%24
    • 最後再用 if 過濾掉不可能的情況即可
    a = s + d;
    b = s - d;
    
    if(a < 0 || b < 0 || a % 2 != 0 || b % 2 != 0){
        printf("impossible\n");
    }
    else{
        printf("%d %d\n", a / 2, b / 2);
    }
    
  • C code
    #include<stdio.h>
    
    int main(){
    
        int n;
        int i;
        int s, d;
        int a, b;
    
        scanf("%d", &n);
    
        for(i = 0; i < n; i++){
    
            scanf("%d %d", &s, &d);
    
            a = s + d;
            b = s - d;
    
            if(a < 0 || b < 0 || a % 2 != 0 || b % 2 != 0){
                printf("impossible\n");
            }
            else{
                printf("%d %d\n", a / 2, b / 2);
            }
        }
    
        return 0;
    }
    

上一篇
Day 0xD UVa10783 Odd Sum
下一篇
Day 0xF UVa10071 Back to High School Physics
系列文
用 C & C++ 帶你手把手解 UVa 一顆星選集30

尚未有邦友留言

立即登入留言