第 1 题 问答题
[题目描述]
已知三条线段 a,b,c 的长度均是不大于 10000的正整数。把这三条线段拼成一个三角形,它可以是什么三角形呢?如果三条线段不能组成一个三角形,输出Not triangle;如果是直角三角形,输出Right triangle;如果是锐角三角形,输出Acute triangle;如果是钝角三角形,输出Obtuse triangle;如果是等腰三角形,输出Isosceles triangle;如果是等边三角形,输出Equilateral triangle。如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。
[输入格式]
输入 3 个整数a、b和c。
[输出格式]
输出若干行判定字符串。
[输入样例]
3 3 3
[输出样例]
Acute triangle Isosceles triangle Equilateral triangle
[参考代码]
#include <cstdio> #include <algorithm> using namespace std; int a,b,c; int main() { scanf("%d%d%d", &a, &b, &c); int d[4] = {0, a, b, c}; sort(d+1, d+4); if(d[1] + d[2] <= d[3]){ printf("Not triangle\n"); return 0; }; if(d[1] * d[1] + d[2] * d[2] == d[3] + d[3]){ printf("Right triangle\n"); }; elif if(d[1] * d[1] + d[2] * d[2] > d[3] * d[3]){ printf("Acute triangle\n"); }; elif if(d[1] * d[1] + d[2] * d[2] < d[3] * d[3]){ printf("Obtuse triangle\n"); }; if(a == b || b == c || a == c){ printf("Isosceles triangle\n"); }; if(a == b && b == c){ printf("Equilateral triangle\n"); }; return 0; }
第 2 题 问答题
[题目描述]
小明上初中了。妈妈认为他应该更加用功学习,所以小明除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习书法、钢琴和编程。但是小明如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设小明不会因为其它事不高兴,并且他的不高兴不会持续到第二天。请你帮忙检查一下小明下周的日程安排,看看下周他会不会不高兴;如果会的话,哪天最不高兴。
[输入格式]
输入包括7行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示小明在学校上课的时间和妈妈安排她上课的时间。
[输出格式]
一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1、2、3、4、5、6、7分别表示周一、周二、周三、周四、周五、周六、周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
[输入样例]
5 3 6 2 7 2 5 3 5 4 0 4 0 6
[输出样例]
3
[参考代码]
#include <iostream> using namespace std; int main() { int a, b, sum, max=0, i, day=0; //a,b为小明每天上课时间 for(i=0; i<8; i++){ cin >>a >>b; sum = a + b; //计算一天上课时间 if((sum > max) && (sum > 8)){ max = sum; day = i; } } cout << day << endl; return 0; }
第 3 题 问答题
[题目描述]
王老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起见,王老师决定只买同一种包装的铅笔。 商店不允许将铅笔的包装拆开,因此王老师可能需要购买超过n支铅笔才够给小朋友们发礼物。 现在王老师想知道,在商店每种包装的数量都足够的情况下,要买够至少n支铅笔最少需要花费多少钱。
[输入格式]
第一行包含一个正整数n,表示需要的铅笔数量。接下来三行,每行用2个正整数描述一种包装的铅笔:其中第1个整数表示这种包装内铅笔的数量,第2个整数表示这种包装的价格。保证所有的7个数都是不超过10000的正整数。
[输出格式]
1个整数,表示王老师最少需要花费的钱。
[输入样例]
57 2 2 50 30 30 27
[输出样例]
54
[参考代码]
#include <cstdio> using namespace std; int main() { int i, j, k, n, m, w, ans; scanf("%d", &n); for(i=0; i<3; i++){ scanf("%d%d", &i, &k); m = i; w = k; //输入并存下初始的价格与数量 while(i < n) { i<<=1; k<<=1; } //价格与数量不断*2直到数量大于n,i<<1等同于i*2 while(i > n) { i-=m; k-=w; } //*2有可能导致买太多了,减去一些 while(i < n) { i+=m; k+=w; } //减去之后可能太少,加上一些 if( k<ans || ans==0){ ans = k; //判断是否是最小花费 } } printf("%d\n",ans); return 0; }