bupt大一上计导算法练习

6-1 设计函数isAmicable

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

亲和数,又称相亲数、友爱数、友好数,指两个正整数中,彼此的全部约数之和(本身除外)与另一方相等。
例如对于220有:
1+2+4+5+10+11+20+22+44+55+110=284
而对于284有:
1+2+4+71+142=220

毕达哥拉斯曾说:“朋友是你灵魂的倩影,要像220与284一样亲密。”。现请你设计一个函数用来判断两个数是否是亲和数。

输入数据第一行包含一个整数t(0<t<20),接下有t行,每行一个实例,包含两个用空格分隔的整数m,n(0 < m,n < 10000000 );
输出数据共t行,每行依次对应输入的t个实例,对于每个测试实例,如果m和n是亲和数的话输出YES,否则输出NO。

函数接口定义:

int isAmicable(int number1 , int number2 ) ;

其中 number1number2 都是用户传入的参数。 且不会超过int的范围;如果这两个数是亲和数则函数返回 1,否则返回 0

裁判测试程序样例:

#include <stdio.h>

int isAmicable(int number1 , int number2 ) ;

int main()
{
    int        t , num1 , num2 ;
    
    scanf( "%d" , &t ) ;
    
    while ( t -- )
    {
        scanf( "%d%d", &num1 , &num2);
        if ( isAmicable( num1 , num2 ) )    
            printf("YES\n");
        else
            printf("NO\n");        
    }
  
    return 0;
}

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

输入样例:

2
30 60
220 284

输出样例:

NO
YES

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

int isAmicable(int number1, int number2)
{
    int sum1 = 0, sum2 = 0;
    for(int i = 1; i < number1; i++)
    {
        if(number1%i==0) sum1 += i;
    }
    for(int j = 1; j < number2; j++)
    {
        if(number2%j==0) sum2 += j;
    }
    if(number1==sum2&&number2==sum1) return 1;
    else return 0;
}

6-2 整数重组

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

本题要求实现一个函数,该函数可以按规定重新组合一个整数。重组的规则为:我们给定一个位置,该位置前的数字不变,指定位置的数字挪到个位,该位置后边的数字依次向前挪一位。例如:待重组整数为1234567890,指定位置为5,则重组后的数字为1234678905。

输入:只有一行,为用空格分隔的两个整数,依次代表待重组整数及被挪动数字的位置。
输出:也只有一行,为重组后的整数。

1、测试用例保证合法;
2、待重组整数非负且位数小于17;
3、如果指定位置为1,则待重组整数第二位不为0,或者说重组后整数的位数不会发生变化(这个条件意义不大,重组后按整数正常输出即可,即使有这样的数据也能正确输出,这里只是明确一下重组后没有前导0)。

函数接口定义:

long long recombination(long long num , int position) ;

其中 numposition 都是用户传入的参数。 num 代表待重组整数; position 代表被挪动数字的位置。函数的返回值为重组后的整数。

裁判测试程序样例:

#include <stdio.h>

long long recombination(long long num , int position) ; 

int main()
{
    long long    num ;
    int            position ;
    
    scanf( "%lld%d" , &num , &position );
    printf( "%lld\n" , recombination( num , position) ) ;
    
    return 0;
}

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

输入样例:

1234567890 5

输出样例:

1234678905

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <math.h>
long long recombination(long long num, int position)
{
    if(num==0) return 0;
    int len = 0;
    long long n = num;
    while(n != 0)
    {
        len++;
        n = n/10;
    }

    long long fro, beh;
    fro = num - num%(long long)pow(10,len-position+1);
    beh = num%(long long)pow(10,len-position)*10;
    long long temp = num%(long long)pow(10,len-position+1);
    long long thenumber = temp/(long long)pow(10,len-position);
    long long res = fro + beh + thenumber;
    return res;
}

7-3 贴邮票四

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

你叕要贴邮票了。现有1元、2元、5元的邮票各无数张。这次的规则是邮资固定,所贴邮票张数固定。你的任务是计算出共有多少种贴法。

输入格式:

第一行为两个用空格分隔的整数m,n(0<m,n<1000),依次代表邮资(单位为元)和规定所贴邮票的张数。

输出格式:

为一个整数,代表贴法的总数。

测试用例保证输入合法,且所有整数可以用int存储

输入样例:

20 10

输出样例:

3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    int m, n;
    scanf("%d %d", &m, &n);

    int x, y, z;
    int count = 0;

    for(x = 0;x <= n; x++)
    {
        for(y = 0; y <= n; y++)
        {
            for(z = 0; z <= n; z++){
                if((x + 2*y + 5*z == m)&&(x + y + z == n)) count++;
            }
        }
    }

    printf("%d", count);
    return 0;
}

7-5 多少个一

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

给定一个整数n(0 < n < 10000 ),如果n不能被2或5整除,那么n的某个倍数一定由若干个1组成。请写程序计算出最小的这样的倍数的位数。

注意:从逻辑上讲,最小的这样的倍数是可能超过long long 的存储范围的,但我们的测试用例保证没有这样的测试数据。

样例解释:最小的这样的倍数为111。

输入格式:

只有一整数代表n。

输出格式:

也只有一个整数,为计算结果。

输入样例:

3

输出样例:

3

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include<stdio.h>
int main(){
	int n,len;
	long long mul;

	scanf("%d",&n);
	mul=1;
	for(len=1; mul%n!=0 ; len++){
		mul = mul*10+1;
	}
	printf("%d",len);
	return 0;	
} 

7-4 数字位数

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

有一个整数数列,第1项为1,第2项为12,第3项为123,第4项为1234,依此类推,有第10项为12345678910,第15项为123456789101112131415 等等。现请你写一段程序计算该数列第n项的位数。

输入格式:

只有一个整数 n (1<=n<=10000000)。

输出格式:

只有一个整数,为该数列第n项的位数。

测试用例保证输入合法。

输入样例:

15

输出样例:

21

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>
int main()
{
    int n;
    scanf("%d", &n);

    int len = 0;

    int i, j;
    for(i = 1; i <= n; i++)
    {
        j = i;
        while(j != 0)
        {
            len++;
            j = j/10;
        }
    }

    printf("%d", len);
    return 0;
}

7-6 谁是凶手

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

某处发生了一起凶杀案,警察共抓到了5名嫌疑人,但不能确定他们谁是凶手。于是,警察对他们5个人分别进行了审问。假设这5名嫌疑人分别为5号,6号,7号,8号和9号,审问结果为:5号说8号是凶手,6号说7号是凶手,7号说9号不是凶手,8号说6号不是凶手,9号说7号是凶手。现在警察知道凶手只有一个且一定在这5人当中。后证实他们中有3个人说了实话(也就是说另两个人说了假话)。现请你写一段程序来找出谁是凶手。

输入格式:

第一行为一个整数 n (0<=n<=5),代表说了实话的人数,第2-6行每行均为两个由空格分隔的整数,代表5名嫌疑人的口供。其中前边的整数代表嫌疑人所说的号码,后边的整数代表他说的这个号码是否为凶手(1代表是凶手,0代表不是凶手)。比如输入样例给出的数据就是我们前边所说的情况。

输出格式:

只有一个整数,为凶手的号码。

测试用例保证输入合法。

输入样例:

3
8  1
7  1
9  0
6  0
7  1

输出样例:

8

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    int right;
    scanf("%d", &right);

    int a, b, c, d, e;
    int A, B, C, D, E;
    scanf("%d %d %d %d %d %d %d %d %d %d", &a, &A, &b, &B, &c, &C, &d, &D, &e, &E);

    int Right = 0;
    for(int i = 5; i <= 9; i++)
    {
        Right = 0;
        if(a == i)
        {
            if(A == 1) Right++;
        }
        else if(a != i)
        {
            if(A == 0) Right++;
        }
        if(b == i)
        {
            if(B == 1) Right++;
        }
        else if(b != i)
        {
            if(B == 0) Right++;
        }
        if(c == i)
        {
            if(C == 1) Right++;
        }
        else if(c != i)
        {
            if(C == 0) Right++;
        }
                if(d == i)
        {
            if(D == 1) Right++;
        }
        else if(d != i)
        {
            if(D == 0) Right++;
        }
                if(e == i)
        {
            if(E == 1) Right++;
        }
        else if(e != i)
        {
            if(E == 0) Right++;
        }
        if(Right == right) printf("%d",i);
    }
    return 0;
}

7-4 算数

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

有一个数x,将它的3倍减5,计算的结果再3倍后减5,这样反复经过n次,最后计算的结果为m。请问x是多少?

输入格式:

只有一行,为两个用空格分隔的整数依次代表n(1<n),m(0<m)。

输出格式:

为一个整数,代表x。测试用例保证合法且可以用int存储。

输入样例:

4 691

输出样例:

11

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);

    int x = 0;

    for(int i = 1; i <= n; i++)
    {
        if(i == 1) x = (m + 5)/3;
        else x = (x + 5)/3;
    }

    printf("%d", x);

    return 0;
}

7-6 方格棋盘

分数 100

全屏浏览

切换布局

作者 scs

单位 北京邮电大学

已知正整数n、m,设有一个nXm方格的棋盘。求出该棋盘中包含正方形与长方形(长方形中不包括正方形)的个数。
例如,当n=2,m=3时,正方形的个数有8个,即边长为1的正方形有6个;边长为2的正方形有2个。长方形的个数有10个,即2X1的长方形有4个;1X2的长方形有3个;3X1的长方形有2个;3X2的长方形有1个。

输入格式:

只有一行,为用空格分隔的两个正整数n、m(1<=n<=100,1<=m<=100),代表棋盘有n行m列。

输出格式:

也只有一行,为用空格分隔的两个正整数依次代表正方形的个数和长方形的个数。

输入样例一:

3 4

输出样例一:

20 40

输入样例二:

2 5

输出样例二:

14 31

输入样例三:

1 7

输出样例三:

7 21

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

#include <stdio.h>

int main()
{
    int n, m;
    scanf("%d %d", &n, &m);

    if(n > m)
    {
        int temp = n;
        n = m;
        m = temp;
    }

    int alls = 0;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            alls = alls + i*j;
        }
    }

    int s = 0;
    for(int k = 0; k <= (n-1); k++)
    {
        s = s + (m-k)*(n-k);
    }

    int nots = alls - s;

    printf("%d %d", s, nots);

    return 0;
}
这个错误是由于无法连接到本地主机的10248端口导致的。这个端口通常是kubelet进程监听的端口,用于健康检查。出现这个错误可能是由于kubelet进程没有正确启动或者配置错误导致的。 解决这个问题的方法是检查kubelet进程的状态和配置。你可以按照以下步骤进行操作: 1. 检查kubelet进程是否正在运行。你可以使用以下命令检查kubelet进程的状态: ```shell systemctl status kubelet ``` 如果kubelet进程没有运行,你可以使用以下命令启动它: ```shell systemctl start kubelet ``` 2. 检查kubelet的配置文件。你可以使用以下命令查看kubelet的配置文件路径: ```shell kubelet --kubeconfig /etc/kubernetes/kubelet.conf --config /var/lib/kubelet/config.yaml --bootstrap-kubeconfig /etc/kubernetes/bootstrap-kubelet.conf config view ``` 确保配置文件中的端口号和地址正确,并且与你的环境相匹配。 3. 检查网络连接。你可以使用以下命令检查是否可以连接到localhost10248端口: ```shell curl -sSL http://localhost:10248/healthz ``` 如果无法连接,请确保端口没有被防火墙或其他网络配置阻止。 4. 检查docker的配置。有时候,kubelet进程依赖于docker进程。你可以按照以下步骤检查docker的配置: - 创建/etc/docker目录: ```shell sudo mkdir /etc/docker ``` - 编辑/etc/docker/daemon.json文件,并添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://tdhp06eh.mirror.aliyuncs.com"] } ``` - 重启docker进程: ```shell systemctl restart docker ``` 请注意,以上步骤是一种常见的解决方法,但具体解决方法可能因环境而异。如果以上步骤无法解决问题,请提供更多的错误信息和环境配置,以便我们能够更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值