洛谷随机刷题之传智杯#3

[传智杯 #3 练习赛] 直角三角形

题目描述

一个直角三角形的两个直角边是 a , b ( a ≤ b ) a,b(a\le b) a,b(ab),其斜边是 c c c,且 a , b , c a,b,c a,b,c 都是正整数。

现在我们已经知道了斜边长度 c c c,请问这个直角三角形的两个直角边的长度是什么?

输入格式

输入一个整数 c ( 1 ≤ c ≤ 1.41 × 1 0 4 ) c(1\le c \le 1.41 \times 10^4) c(1c1.41×104)

输出格式

输出两个整数 a , b a,b a,b 表示答案。保证有整数解。如果有多个可能的答案,请确保 a a a 尽可能的小。

样例 #1

样例输入 #1

5

样例输出 #1

3 4

答案

#include 
int main()
{
    int a = 0, b = 0, c = 0, d = 0;
    scanf("%d", &c);	//斜边
    for (a = 1; a < c; ++a)	//直角边a
    {
        for (b = 1; b < c; ++b)	//直角边b
        {
            if (c * c == a * a + b * b)
                //两直角边的平方相加等于斜边的平方(勾股定理)
            {
                printf("%d %d", a, b);
                d++;
            }
        }
        if(d==1)	
        {
            break;	//终止循环
        }
    }
}

[传智杯 #3 初赛] 期末考试成绩

题目描述

传智专修学院的 Java 程序设计课程的评价体系是这样的:

首先,所有学生会有一个卷面得分,这个得分一定是一个 [ 0 , 100 ] [0,100] [0,100] 之间的整数。

如果卷面得分在 90 90 90 分以上,那么他的 GPA(加权平均成绩) 就是满分 4.0 4.0 4.0

如果卷面得分在 60 ∼ 89 60 \sim 89 6089 之间,那么他每比 90 90 90 分少 1 1 1 分,那么他的分数就会在 4.0 4.0 4.0 的基础上减少 0.1 0.1 0.1

如果卷面得分不到 60 60 60 分,那么善良的老师会给他照顾。具体来说,如果他的分数为 x x x ,那么老师会把他的分数调整为 x × 10 \sqrt{x}\times 10 x ×10(向下取整) ,再计算他的 GPA。

如果经过调整该学生的得分依旧没满 60 60 60 ,那么他就挂科了,GPA 就是 0 0 0 分。

现在给你一个人的期末卷面得分,请你输出他的最终 GPA

输入格式

一行一个整数 x x x,表示该人的期末得分。

输出格式

一个小数点后只有一位的浮点数,表示该同学获得的GPA。

请注意,如果有 . 0 .0 .0 请保留。

样例 #1

样例输入 #1

99

样例输出 #1

4.0

样例 #2

样例输入 #2

88

样例输出 #2

3.8

样例 #3

样例输入 #3

12

样例输出 #3

0.0

提示

对于 20 % 20\% 20% 的数据,满足 90 ≤ x ≤ 100 90 \leq x \leq 100 90x100
对于额外 30 % 30\% 30% 的数据,满足 60 ≤ x ≤ 100 60 \leq x \leq 100 60x100
对于 100 % 100\% 100% 的数据,满足 0 ≤ x ≤ 100 0 \leq x \leq 100 0x100

答案

#include 
#include 
int main()
{
    int x = 0;
    float GPA = 4.0;
    scanf("%d", &x);
    if (x >= 90)	//	90及以上
    {
        printf("%.1f", GPA);
    }
    else if (x >= 60)	//	60及以上
    {
        GPA = GPA - (90.0-x)/10;
        printf("%.1f", GPA);
    }
    else
    {
        x = sqrt(x) * 10;	//重新计算
        if (x < 60)
        {
            GPA = 0.0;
            printf("%.1f", GPA);
        }
        else
        {
            if (x >= 90)
            {
                printf("%.1f", GPA);
            }
            else
            {
                GPA = GPA - (90.0 - x) / 10;
                printf("%.1f", GPA);
            }
        }
    }
}

[传智杯 #3 决赛] 课程

题目背景

disangan233 喜欢数数,于是他想让你帮他回答一个问题。

题目描述

传智专修学院提供 A , B A,B A,B 两个课程,分别有 n , m n,m n,m 个学生报名。报名 A A A 的学生的编号为 a n a_n an,报名 B B B 的学生的编号为 b m b_m bm,求有多少个学生同时报名了两个课程。

对于所有数据, n , m , a i , b i ≤ 20 n,m,a_i,b_i\leq 20 n,m,ai,bi20,保证每个课程报名的学生编号不会重复。

输入格式

输入共 3 3 3 行。

1 1 1 行输入 2 2 2 个正整数 n , m n,m n,m

2 2 2 行输入 n n n 个正整数 a 1 … a n a_1\ldots a_n a1an,表示报名课程 A A A 的学生编号。

3 3 3 行输入 m m m 个正整数 b 1 … b m b_1\ldots b_m b1bm,表示报名课程 B B B 的学生编号。

学生编号不保证从小到大排序。

输出格式

输出共 1 1 1 1 1 1 个整数,表示答案。

样例 #1

样例输入 #1

5 5
1 2 3 4 5
1 3 4 5 6

样例输出 #1

4

提示

样例解释

我们发现, 1 , 3 , 4 , 5 1,3,4,5 1,3,4,5 4 4 4 名学生同时报名了两门课程,所以答案是 4 4 4

答案

#include 
int main()
{
    int m = 0, n = 0, sum = 0;	//两数组长度以及数组相似的的个数
    int a[21] = { 0 };	
    int b[21] = { 0 };
    scanf("%d%d", &m, &n);	//输入两数组长度
    for (int i = 0; i < m; i++)	//a数组赋值
    {
        scanf("%d", &a[i]);
    }
    for (int j = 0; j < n; j++)	//b数组赋值
    {
        scanf("%d", &b[j]);
    }
    for (int x = 0; x < m; x++)
    {
        for (int y = 0; y < n; y++)
        {
            if (a[x] == b[y])	//两数组比较相同值
            {
                sum++;
            }
        }
    }
    printf("%d", sum);
}

你可能感兴趣的:(刷题,c语言)