第 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;
}

发表回复