PAT乙级(简单模拟)1001、1011、1016、1026、1046、1012、1018(一)

简介: PAT乙级(简单模拟)1001、1011、1016、1026、1046、1012、1018

1001 害死人不偿命的(3n+1)猜想

卡拉兹(Callatz)猜想:

对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1

输入格式:每个测试输入包含 1 个测试用例,即给出正整数 n 的值。

输出格式:输出从 n 计算到 1 需要的步数。

输入样例

3

输出样例代码:

5

代码:

#include<stdio.h>
int main(){
    int n, count = 0;
    scanf("%d", &n);
    while(n != 1){//n进入循环,直到n=1
        if(n % 2 == 1){//n为奇数时
            n = 3 * n + 1;
            n /= 2;
        }
        else{//n为偶数时
            n /= 2;
        }
        count++;
    }
    printf("%d", count);
}

1011 A+B 和 C

给定区间 [−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。

输入格式:

输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。

输出格式:对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。

输入样例:

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

输出样例:

Case #1: false
Case #2: true
Case #3: true
Case #4: false

代码:

#include<stdio.h>
int main() {
    int times, i;//times用于判断次数,i用于遍历数组
    scanf("%d", &times);
    struct Num {//定义结构体数组Num,用于存放每次输入的数据(也可以不设置结构体)
        long long num1, num2, num3;
    }number[10];
    for (i = 0; i < times;) {
        //循环输入数据
        scanf("%lld %lld %lld", &number[i].num1, &number[i].num2, &number[i].num3);
        //判断A + B > C
        if (number[i].num1 + number[i].num2 > number[i].num3) {
            printf("Case #%d: true\n", ++i);//因为i为数组下标,所以需要++i
        }
        else {
            printf("Case #%d: false\n", ++i);
        }
    }
    return 0;
}

1016 部分A+B

正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。

现给定 A、DA、B、DB,请编写程序计算 PA+PB。

输入格式:

输入在一行中依次给出 A、DA、B、DB,中间以空格分隔,其中 0<A,B<109。

输出格式:

在一行中输出 PA+PB 的值。

输入样例 1:

3862767 6 13530293 3

输出样例 2:

3862767 1 13530293 8

输出样例 2:

0

代码:

#include<stdio.h>
#include<math.h>
int getNum(int num, int digit) {
    int i, temp;
    for (i = -1; num > 0;) {
        temp = num % 10;//每次对10取模得到最后一位数字
        if (temp == digit) {//判断数字中有几个数字是和传入的参数相同
            i++;
        }
        num /= 10;//每次除10,小数点左移一位,即删除最后一位数字
    }
    //也可以采用temp = temp * 10 + digit的方式得到最后结果,这样可以不用使用头文件<math.h>
    for (temp = 0; i >= 0; i--) {//每次加上要求匹配数字的10的i次方,继而得到最终结果
        temp = temp + digit * pow(10, i);
    }
    return temp;
}
int main() {
    int num1, num2, digit1, digit2, result1, result2;
    scanf("%d%d%d%d", &num1, &digit1, &num2, &digit2);
    result1 = getNum(num1, digit1);
    result2 = getNum(num2, digit2);
    printf("%d", result1 + result2);
}




相关文章
|
6月前
|
测试技术
PAT(乙级) 1005 继续(3n+1)猜想 (25)
PAT(乙级) 1005 继续(3n+1)猜想 (25)
|
7月前
【随想】每日两题Day.3(实则一题)
【随想】每日两题Day.3
32 0
|
7月前
|
存储
【随想】每日两题Day.10(实则一题)
【随想】每日两题Day.10(实则一题)
35 0
|
7月前
【随想】每日两题Day.16(实则一题)
【随想】每日两题Day.16(实则一题)
36 0
|
7月前
【随想】每日两题Day.5 (实则一题)
【随想】每日两题Day.5
31 0
|
7月前
|
存储 算法
【随想】每日两题Day.20(实则一题)
【随想】每日两题Day.20(实则一题)
39 0
|
7月前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
42 0
|
算法 Java
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
68 0
leetcode 1921. 消灭怪物的最大数量(每日一题)
leetcode 1921. 消灭怪物的最大数量(每日一题)
84 0
洛谷P1135 奇怪的电梯——广搜
洛谷P1135 奇怪的电梯——广搜
106 0