bupt 2024大一上第二次机考

目录

6-1数字判断

函数接口定义:

裁判测试程序样例:

输入样例:

输出样例:

answer1:

answer2:

 6-2 数制

函数接口定义:

裁判测试程序样例:

输入样例:

输出样例:

answer:

7-1回文数2 

输入格式:

输出格式:

输入样例一:

输出样例一:

输入样例二:

输出样例二:

answer:

 7-2第十届黄龙市杯世界女子围棋赛

输入格式:

输出格式:

输入样例:

输出样例:

 answer:

7-3乘车 

输入格式:

输出格式:

输入样例:

输出样例:

answer: 

7-4账单 

输入格式:

输出格式:

输入样例:

输出样例:

answer:

7-5贴邮票一

输入格式:

输出格式:

输入样例:

输出样例:

answer:


6-1数字判断

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

请写一个函数,该函数可以判断一个非负整数的每一位数字是不是从右到左严格递增的。比如54321即满足这个条件;但221就不满足。
特别提醒,如果一个非负整数只有1位我们认为它是严格递增的。

输入格式
第1行是一个正整数n( (n < 30),后面跟着n行输入,每行一个整数,代表n个待判断的非负整数。测试用例保证合法且所有整数都可以用int存储。
输出格式
输出包含n行,每行都是一个整数,依此对应输入中n个待判断的非负整数的判断结果(函数返回值)。

函数接口定义:

int judge( int n );

其中 n 是用户传入的参数,代表待判断整数。当n 是从右到左严格递增时函数须返回 0,否则函数返回从右到左第一次违反严格递增的那个数字的位数(个位为第1位,十位为第2位,依此类推)。

裁判测试程序样例:

#include<stdio.h>

int    judge(int) ;

int    main()
{ 
    int        i , n , num;

    scanf( "%d" , &n ); 
    for ( i = 0 ; i < n ; i++ )
    {
        scanf( "%d" , &num );
        printf( "%d\n" ,  judge(num) ); 
    }

    return 0 ;
}

/* 请在这里填写答案 */

输入样例:

2
12345
54321

输出样例:

2
0

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

answer1:

int judge(int n)
{
    int number = n;

    int len = 0;
    while(number != 0)
    {
        len++;
        number = number / 10;
    }

    int flag = 1;
    int i = 1;
    if(len == 1)
    {
        return 0;
    }
    else
    {
    while((n / 10) != 0)
    {
        int a = n % 10;
        n = n / 10;
        int b = n % 10;
        i++;
        if(a >= b)
        {
            flag = 0;
            return i;
        }
    }
        if(flag == 1) return 0;
    }
}

ps:感觉我用一个求数字位数的函数只为了判断是否是1位数是小题大做,简直是太蠢了,不妨用n/10是否为0来就行判断,和后面也有呼应一点

answer2:

int judge(int n)
{

    int flag = 1;
    int i = 1;

    if((n / 10) == 0)
    {
        return 0;
    }
    else
    {
    while((n / 10) != 0)
    {
        int a = n % 10;
        n = n / 10;
        int b = n % 10;
        i++;
        if(a >= b)
        {
            flag = 0;
            return i;
        }
    }
        if(flag == 1) return 0;
    }
}

 6-2 数制

记数是人类用来表示和计算数量的基本方法。在记数过程中,我们通常使用一系列有序的符号或数字来表示数量。这些符号或数字可以是简单的(如手指计数),也可以是复杂的(如现代数学中的数字系统)。这里有一个非常重要的概念就是数制。数制中表示数值大小的那些固定的数字符号称为数码。每种数制所使用数码的个数称为该进制数的基数。比如十进制的基数为10,二进制的基数为2。一个数码处在不同位置上所代表的值不 同,每个数码所表示的数值等于该数码乘以一个与数码所在位置相关的常数,这个常数叫做位权。位权的大小是以该数制的基数为底、数码所在位置的序号为指数的整数次幂。例如:二进制数101,左边的数码1的位权是22,中间的数码0的位权是21,右边的数码1的位权是20。十进制数12.1,小数点前面的数码1的位权是101,数码2的位权是100,小数点后面的数码1的位权是10−1。
事实上对于任意一个R进制数都可以表示为该数制的数码与基数的幂次的乘积之和,即对任意的R进制数an−1​an−2​…a1​a0​a−1​a−2​…a−m​,都可以表示成按位权展开的多项式之和的形式:an−1​×Rn−1+an−2​×Rn−2+…+a1​×R1+a0​×R0+a−1​×R−1+a−2​×R−2+…+a−m​×R−m。其中,R是数制的基数,ai​ (i = -m,…,-2,-1,0,1.,…,n-1) 为该数制的数码,n为该R进制数的整数部分的位数,m为小数部分的位数。
尽管不同进制在表示数值时使用的数字和进位规则不同,但它们都可以表示相同的数值范围,只是表示方式和长度不同。因此,在理论上讲,各种进制是等价的。
现给定十进制正整数,和一个进制的基数(10进制表示),请你写一个函数将这个正整数变为该进制的数码与基数的幂次的乘积之和。

输入:
第一行为一个整数T(0<T<100),代表共T组测试用例。后边是T行,每行均为两个用一个空格分隔的整数,依次代表待处理十进制整数n(0<n<100000000),和基数base(1<base<100)。测试用例保证合法。
输出:
若干行,每组测试用例的格式都是一样的,先输出测试用例的序号(见输出样例),然后幂次从小到大的顺序输出多项式中每一项的数码和权值(用一个空格分隔),每行输出一项(具体见输出样例),如果数码为0,则不输出该项。
样例解释:
第一组测试用例,10进制整数12345可以表示为 5×100+4×101+3×102+2×103+1×104 ,即 12345 = 5 + 40 + 300 + 2000 + 10000 。
第二组测试用例,10进制整数12345可以表示为 1×20+1×23+1×24+1×25+1×212+1×213 (1 ,2,6,7,8 ,9 ,10,11次幂所乘的数码均为0,所以没有输出), 即12345 = 1 + 8 + 16 + 32 + 4096 + 8192 。(特别的,由于二进制的数码只有0和1两个,因此任意一个正整数都可以惟一的表示为若干个2的幂次之和。)

函数接口定义:

void    printBasePower( int number , int base ) ;

其中 numberbase 都是用户传入的参数。number 代表待处理10进制正整数; base 是进制的基数。函数没有返回值,但要按要求输出结果。

裁判测试程序样例:

#include <stdio.h>

void    printBasePower( int number , int base ) ;

int main()
{
    int      
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值