习题 3-1

当 a=3,b=4,c=5,判断以下表达式是否成立?

  1. a<b||b>c||a>b

True

  1. a>c||b>a&&c>b

True

  1. b-a==c-b

True

  1. ab-c>ac-b||ab+bc==bb(c-a)

True

习题 3-2

当 a=1,b=0,c=1,判断以下表达式是否成立?

  1. !a || !b

True

  1. (a&&!a) || (b||!b)

True

  1. a&&b&&c||!a||!c

False

  1. a&&(b&&c||a&&c)

True

  1. !b&&(c&&(a&&(!c||(!b||(!a)))))

True

习题 3-3

对于整数变量 x,写出与判断以下性质对应的表达式:

  1. x 是否为偶数。

x%2==0

  1. x 是否为 4 位整数。

x>999 && x<10000

  1. x 是否为完全平方数(提示:数据类型转换)

$(int)\sqrt{x}*(int)\sqrt{x} == x$

  1. x 是否同时是奇数、完全立方数,而且是 3 位整数。

x%2==1 && $ (int)\sqrt{x}*(int)\sqrt{x}$ == x && x>99 && x<1000

  1. x 是否是水仙花数(也就是说 x 是各位数的立方和等于 x 的 3 位整数)。

x>99 && x<1000 && ((x%10)*(x%10)*(x%10) + ((x%100)/10)*((x%100)/10)*((x%100)/10) + (x/100)*(x/100)*(x/100) = x)

习题 3-4

小玉家的电费(洛谷P1422)

夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入格式

输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。

输出格式

输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。

输入输出样例

输入

输出

267

121.5

解答

#include <iostream>
using namespace std;
double cost[10005];//代表第i度电的花费
int a;
double b;
int main()
{
    int i;
    cin>>a;
    for(i=1;i<=150;i++)
       cost[i]=0.4463;
    for(i=151;i<=400;i++)
       cost[i]=0.4663;
    for(i=401;i<=10000;i++)
       cost[i]=0.5663;
    for(i=1;i<=a;i++)
       b+=cost[i];
    b=int((b*10)+0.5)/10.0;
    cout<<b<<endl;
    return 0;
}

习题 3-5

小鱼的航程(洛谷P1424)

有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x(1≤x≤7) 开始算起,过了 n(n≤106) 天以后,小鱼一共累计游泳了多少公里呢?

输入格式

输入两个整数x,n(表示从周x算起,经过n天)。

输出格式

输出一个整数,表示小鱼累计游泳了多少公里。

输入输出样例

输入

输出

3 10

2000

解答

#include<iostream>
using namespace std;

int x,n,c;
int main()
{
    cin>>x>>n;
    
    c=(n/7)*5;
    
    if(n%7 > (7-x) && x>6)
    	c+=n%7-1;
    else if(n%7 > (7-x))
    	c+=n%7-2;
    else
    	c+=n%7;
    
    cout<<c*250;
    return 0;
}

习题 3-6

三角函数(洛谷P1888)

输入一组勾股数$ a,b,c(a\neq b\neq c)$,用分数格式输出其较小锐角的正弦值。(要求约分。)

输入格式

一行,包含三个正整数,即勾股数 a,b,c(无大小顺序)。

输出格式

一行,包含一个分数,即较小锐角的正弦值

输入输出样例

输入

输出

3 5 4

3/5

解答

#include<iostream>
#include <algorithm>
using namespace std;

int a,b,c;
int g;
int gcd(int a,int b);

int main()
{
    cin>>a>>b>>c;	
	if(a>b) swap(a,b); //swap就是交换两个数
	if(a>c) swap(a,c);
	if(b>c) swap(b,c);
	
	g=gcd(a,c);
	
	cout<<a/g<<'/'<<c/g;

    return 0;
}

int gcd(int a,int b) 
{
    int r;
    while(b>0) {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}

习题 3-7

陶陶摘苹果(洛谷P1046,NOIP2005普及组)

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入格式

输入包括两行数据。第一行包含 10 个 100 到 200 之间(包括 100 和 200 )的整数(以厘米为单位)分别表示 10 个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个 100 到 120 之间(包含 100 和 120 )的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出格式

输出包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

输入输出样例

输入

输出

100 200 150 140 129 134 167 198 200 111110

5

解答

#include<bits/stdc++.h>
using namespace std;

int a[10],h,c;

int main()
{
    c=0;
    for(int i=0;i<10;i++)
    {
        cin>>a[i];
    }
    cin>>h;
    h+=30;
    for(int i=0;i<10;i++)
    {
        if(a[i]<=h)
            c++;
    }
    cout<<c;
    
    return 0;
}

习题 3-8

三角形分类(洛谷P5717)

给出三条线段 a,b,c 的长度,均是不大于 10000 的整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?

  • 如果三条线段不能组成一个三角形,输出Not triangle
  • 如果是直角三角形,输出Right triangle
  • 如果是锐角三角形,输出Acute triangle
  • 如果是钝角三角形,输出Obtuse triangle
  • 如果是等腰三角形,输出Isosceles triangle
  • 如果是等边三角形,输出Equilateral triangle

如果这个三角形符合以上多个条件,请分别输出,并用换行符隔开。

说明提示

当两条短边的和少于长边的时候,不能组成三角形。
当两短边的平方和大于一长边的平方,说明是锐角三角形。
当两短边的平方和等于一长边的平方,说明是直角三角形。
当两短边的平方和小于一长边的平方,说明是钝角三角形。

解答

#include<bits/stdc++.h>
using namespace std;

int a[3],s,l;

int main()
{
    cin>>a[0]>>a[1]>>a[2];
    sort(a,a+3);
    
    if(a[0]+a[1]<a[2])
        cout<<"Not triangle"<<endl;
    else
    {
        s=a[0]*a[0]+a[1]*a[1];
        l=a[2]*a[2];

        if(s==l)
            cout<<"Right triangle"<<endl;
        else if(s>l)
            cout<<"Acute triangle"<<endl;
        else
            cout<<"Obtuse triangle"<<endl;
    
        if(a[0]==a[1])
            cout<<"Isosceles triangle"<<endl;
        if(a[0]==a[1] && a[0]==a[2])
            cout<<"Equilateral triangle"<<endl;
    }
    return 0;
}

习题 3-9

ABC(洛谷P4414,COCI2006)

You will be given three integers A, B and C. The numbers will not be given in that exact order, but we do know that A is less than B and B less than C. In order to make for a more pleasant viewing, we want to rearrange them in the given order.

翻译:
三个整数分别为 A,B,CA,B,C . 这三个数字不会按照这样的顺序给你,但它们始终满足条件: A<B<CA<B<C . 为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。

输入格式

The first line contains three positive integers A, B and C, not necessarily in that order. All three numbers will be less than or equal to 100. The second line contains three uppercase letters 'A', 'B' and 'C' (with no spaces between them) representing the desired order.

翻译:
第一行包含三个正整数 A,B,CA,B,C ,不一定是按这个顺序。这三个数字都小于或等于 100100 。第二行包含三个大写字母 AA 、 BB 和 CC (它们之间没有空格)表示所需的顺序.

输出格式

Output the A, B and C in the desired order on a single line, separated by single spaces.

翻译:
在一行中输出 AA ,BB 和 CC ,用一个 (空格)隔开.

输入输出样例

输入

输出

1 5 3ABC

1 3 5

6 4 2CAB

6 2 4

解答

#include<bits/stdc++.h>
using namespace std;

int a[3];
char c;

int main()
{
	cin>>a[0]>>a[1]>>a[2];
	sort(a,a+3);
    for(int i=0;i<3;i++)
    {
    	cin>>c;
    	switch(c)
    	{
    		case 'A':
    			cout<<a[0]<<' ';
    			break;
    		case 'B':
    			cout<<a[1]<<' ';
    			break;
    		case 'C':
    			cout<<a[2]<<' ';
    			break;
		}
    }
    
    return 0;
}