---
# System prepended metadata

title: 北軟99 pA 猜數字遊戲
tags: [北軟99]

---

# 北軟99 pA 猜數字遊戲
###### tags: `北軟99`

## 題目：

1. 請設計一程式, 可根據箭頭上所給定的數字(-20~20 之間的整數), 自動猜出在格子內的數字。例如：在下圖中給定 9, 5, 8, 4, 7, 6 等六個數字, 可猜出 a=1, b=4, c=5, d=3。

![](https://i.imgur.com/xkcF8vW.png)

2. 提示：你可以利用 a + b = 5, a + c = 6, b + c = 9 這三個方程式先解出a, b, c 三個未知數, 再利用 b + d = 7 或其它包含 d 的方程式解出 d 的值。
3. 程式一開始執行時, 可顯示如圖一之畫面(必須畫線)。(3 分)
4. 當給定外圍的六個數字時, 按”開始”鍵, 能正確猜出在格子內的數字並顯示, 如圖二所示。(15 分)
5. 當無解時, 按”開始”鍵, 能顯示”無解”, 並將未知數回復到 a, b, c, d, 如圖三所示。(5 分) 
6. 當輸入的數字超過範圍, 按”開始”鍵, 能顯示”數字超過範圍”, 如圖四所示。(2 分) 

![](https://i.imgur.com/W558oJC.png)


## 想法：

這題是水題，由於提示已經很明顯的告訴你要怎麼做了，只需要按表施工就好。
處理$a+b,a+c,b+d,a+d,c+d,c+b$

然後先$(a+b) + (b+c) + (a+c) = 2(a+b+c)$
接下來除以二就能得到$(a+b+c)$

依序列出

$c = (a+b+c) - (a+b)$
$b = (a+b+c) - (a+c)$
$a = (a+b+c) - (b+c)$

最後

$d = (b+d) - b$

依序print到對應的格子上即可。

## 程式碼(C#)

```csharp=
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace problemA
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "a";
            textBox2.Text = "b";
            textBox3.Text = "c";
            textBox4.Text = "d";
            label1.Text = "";

            int aplusb = Convert.ToInt16(textBox6.Text); //a+b的那一格
            int aplusc = Convert.ToInt16(textBox10.Text); //a+c的那一格
            int bplusd = Convert.ToInt16(textBox9.Text); //b+d的那一格
            int aplusd = Convert.ToInt16(textBox8.Text); //a+d的那一格
            int cplusd = Convert.ToInt16(textBox7.Text); //c+d的那一格
            int cplusb = Convert.ToInt16(textBox5.Text); //c+b的那一格

            int two_aplusbplusc = (aplusb + cplusb + aplusc);

            int[] check_array = { aplusb, aplusc, bplusd, aplusd, cplusd, cplusb };
            bool find = false;

            for(int i = 0; i < check_array.Length; i++)
            {
                if(check_array[i] > 20 || check_array[i] < -20)
                {
                    find = true;
                    break;
                }
            }

            if(find == true)
            {
                label1.Text = "數字超過範圍";
                return;
            }

            if(two_aplusbplusc % 2 != 0)
            {
                label1.Text = "無解";
                return;
            }

            int aplusbplusc = two_aplusbplusc / 2;
            int a = aplusbplusc - cplusb;
            int b = aplusbplusc - aplusc;
            int c = aplusbplusc - aplusb;
            int d = bplusd - b;

            textBox1.Text = a + "";
            textBox2.Text = b + "";
            textBox3.Text = c + "";
            textBox4.Text = d + "";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Environment.Exit(0);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }
    }
    
}
```