蓝杯三十六

作者: 逍遥_9353 | 来源:发表于2018-02-01 20:14 被阅读5次

    算法训练 数位分离 

    时间限制:1.0s  内存限制:512.0MB

    提交此题   

    问题描述

      编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出来,并逐一地显示。

      输入格式:输入只有一行,即一个1000以内的正整数。

      输出格式:输出只有一行,即该整数的每一位数字,之间用空格隔开。

      输入输出样例

    样例输入

    769

    样例输出

    7 6 9

    #include <stdio.h>

    void getResult(int num)

    {

        //出口

        if(num<10)

        {

            printf("%d ",num);

            return ;

        }

        //递归

          getResult(num/10);

     

      printf("%d ",num%10);

    }

    int main()

    {

      int n; 

      scanf("%d",&n);

      getResult(n);

      printf("\n");

      return 0;

    }

    思路分析:

    ①定义变量:一个小于1000的整数;

    ②输入整数;

    ③调用函数将每个数字分离:如果该数小于10,则输出;如果该数大于10,则用递归将其分离并输出。

    算法训练 6-2递归求二进制表示位数 

    时间限制:10.0s  内存限制:256.0MB

    提交此题   

    问题描述

      给定一个十进制整数,返回其对应的二进制数的位数。例如,输入十进制数9,其对应的二进制数是1001,因此位数是4。

    样例输入

    一个满足题目要求的输入范例。

    9

    样例输出

    9

    4

    与上面的样例输入对应的输出。

    数据规模和约定

      输入数据中每一个数的范围。

      例:输入在int表示范围内。

    #include"stdio.h"

    int main()

    {

      long int n;

        int s=0;

        scanf("%d",&n);

        while(n!=0)

    {

          s++;

          n=n/2;

    }

    printf("%d\n",s);

    return 0;

    思路分析:

    ①定义变量:一个十进制整数,位数(初始化为0);

    ②输入十进制整数;

    ③循环直至该数为0跳出,位数加1,转变为二进制是该数被2整除;

    ④输出位数。

    算法训练 友好数 

    时间限制:1.0s  内存限制:256.0MB

    提交此题   

    问题描述

      有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。例如:

      9的约数和有:1+3=4

      4的约数和有:1+2=3

      所以9和4不是友好的。

      220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284

      284的约数和有:1 2 4 71 142=220

      所以220和284是友好的。

      编写程序,判断两个数是否是友好数。

    输入格式

      一行,两个整数,由空格分隔

    输出格式

      如果是友好数,输出"yes",否则输出"no",注意不包含引号。

    样例输入

    220 284

    样例输出

    yes

    数据规模和约定

      两个整数都小于10000

    #include "stdio.h"

    int fun(int n){

        int count=0,i;

        for(i=1;i < n;i++){

            if(n % i==0){

                count+=i;

            }

        }

        return count;

    }

    int main(){

        int num1,num2;

        int a,b;

        scanf("%d%d",&num1,&num2);

        b=fun(num1);

        a=fun(num2);

        if(a==num1 && b==num2){

            printf("yes\n");

        }

        else{

            printf("no\n");

        }

        return 0;

    }

    思路分析:

    ①定义变量:两个整数;

    ②输入两个整数;

    ③调用函数:

    (1) 定义变量:约数,约数和(初始化为0);

    (2)for语句循环(从1开始,循环到该数),用if语句判断该数是否被约数整除余数为0,如果为0,则累加;

    (3)返回值为约数和;

    ④if语句判断是否为友好数,如果是则输出yes,否则则为no。

    相关文章

      网友评论

        本文标题:蓝杯三十六

        本文链接:https://www.haomeiwen.com/subject/fidjzxtx.html