Quiz 03
===
# [A] Right Triangle
## Description
A simple corollary from Pythagorean theorem is that in a right triangle the square of hypotenuse equals to sum of square of the two legs. Write a program to determine whether a triangle is a right triangle or not by using this corollary.
**Input**
The input begins with an integer n, indicating the number of cases. Each case contains three integers, which are the lengths of the three sides of a triangle.
**Output**
For each case, output the description of such triangle in a separate line in the format:
“The triangle with edges a, b, and c is (not) a right triangle.”
**Sample**
| Input | Output |
|:------- |:------------------------------------------------------------ |
| 3 | |
| 2 3 4 | The triangle with edges 2, 3, and 4 is not a right triangle. |
| 3 4 5 | The triangle with edges 3, 4, and 5 is a right triangle. |
| 5 12 13 | The triangle with edges 5, 12, and 13 is a right triangle. |
## Solution
- Pythagorean Theorem:
Let a be the longest side: $a^2 = b^2 + c^2$
In this problem, we're not sure which size is the longest, therefore we need to check if $b^2 = a^2 + c^2$ and $c^2 = a^2 + b^2$.
- pseudo code:
```
user inputs how many cases there will be (n)
for case 1 to case n:
user inputs a, b, c //three sides of the triangle
if a, b, c satisfies the Pythagorean theorem:
print "is a right triangle"
else
print "is not a right triangle"
```
## Code
```c=
#include <stdio.h>
int main(){
int n; //cases
int a, b, c; //side's length
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%d %d %d", &a, &b, &c);
if((a*a == b*b + c*c) || (b*b == a*a + c*c) || (c*c == a*a + b*b)){
printf("The triangle with edges %d, %d, and %d is a right triangle.\n", a, b, c);
}
else{
printf("The triangle with edges %d, %d, and %d is not a right triangle.\n", a, b, c);
}
}
}
```
# [B] Combat
## Code
```c=
#include <stdio.h>
int main(){
int atk_pow, atk_life, def_pow, def_life;
int count = 1; //記錄為第幾局
while(1){
scanf("%d %d %d %d", &atk_pow, &atk_life, &def_pow, &def_life);
//if all four inputs are zeros, end the loop
if(!atk_pow && !atk_life && !def_pow && !def_life){
break;
}
printf("Combat %d: ", count);
if(atk_pow >= def_life){
if(def_pow >= atk_life){ //both vanished
printf("Sacrificed attack. Both vanished. ");
}
else{ //defender vanished, attacker survived
printf("Well attack. Defender vanished, and attacker survived. ");
}
if(atk_pow > def_life){
if(atk_pow-def_life == 1)
printf("Attacker caused 1 damage to opponent player.\n");
else
printf("Attacker caused %d damages to opponent player.\n", atk_pow-def_life);
}
else{
printf("No damage caused.\n");
}
}
else{
if(def_pow >= atk_life){ //attacker vanished, defender survived
printf("Poor attack. Attacker vanished, but defender survived. No damage caused.\n");
}
else{ //both survived
printf("Ineffective attack. Both survived. No damage caused.\n");
}
}
count++;
}
}
```
# [C] Find the Number
## Code
```c=
#include <stdio.h>
int main(){
int n; //cases
int t, a, c, target; //sequence type | starting number | difference/ratio | target number
int x;
scanf("%d", &n);
for(int i=0; i<n; i++){
scanf("%d %d %d %d", &t, &a, &c, &target);
x = a;
if(t==1){ //arithmetice sequence
//find the greatest number
while(x < target){
x += c;
}
x -= c;
printf("The greatest number in the arithmetic sequence starting from %d with difference %d less than %d is %d.\n", a, c, target, x);
}
else{ //geometric sequence
//find the greatest number
while(x < target){
x *= c;
}
x /= c;
printf("The greatest number in the geometric sequence starting from %d with ratio %d less than %d is %d.\n", a, c, target, x);
}
}
}
```
###### tags: `程設一quiz`