• 算法实验题(涉外黄成老师!!!)


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    日期 2022.11.19

    目录
    实验报告一 第一题 2
    实验报告二 第二题 3
    实验报告三 第三题 4
    实验报告四 第四题 5
    实验报告五 第五题 6
    实验报告六 第六题 7

    实验报告一 第一题
    一、实验目的
    由1,3,4,5,7,8这六个数字所组成的六位数中,找能被11整除的最大的数
    二、实验内容
    (实验题目描述)
    由1,3,4,5,7,8这六个数字所组成的六位数中,能被11整除的最大的数是多少?
    各位数字和为1+3+4+5+7+8=28
    所以偶数位和奇数位上数字和均为14
    为了使得该数最大,首位必须是8,第2位是7,14-8=6
    那么第3位一定是5,第5位为1
    该数最大为875413。

    三、实验过程
    (实验源码、实验结果)

    #include 
    int main()
    {int a,b,c,d,e,f;
     for(a=8;a>0;a--)
      if(a-2&&a-6)
       for(b=8;b>0;b--)
        if(b-a&&b-2&&b-6)
         for(c=8;c>0;c--)
          if(c-a&&c-b&&c-2&&c-6)
           for(d=8;d>0;d--)
            if(d-a&&d-b&&d-c&&d-2&&d-6)
             for(e=8;e>0;e--)
              if(e-a&&e-b&&e-c&&e-d&&e-2&&e-6)
               {f=1+3+4+5+7+8-a-b-c-d-e;
                if(a+c+e==b+d+f)
                {printf("%d%d%d%d%d%d",a,b,c,d,e,f);
                 return 0;
                }
               }
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述

    四、实验总结
    (实验心得体会)
    C语言写的,用多个循环可以解决

    实验报告二 第二题
    一、实验目的
    用1,2,5,7,8,9这六个数字(每个数字至多用一次)来组成一个五位数,使得它能被75整除
    二、实验内容
    (实验题目描述)
    请用1,2,5,7,8,9这六个数字(每个数字至多用一次)来组成一个五位数,使得它能被75整除,并求出这样的五位数有几个?
    75=3×25
    若被3整除,则各位数字和是3的倍数,1+2+5+7+8+9=32
    所以应该去掉一个被3除余2的,因此要么去掉2要么去掉8
    先任给一个去掉8的,17925即满足要求
    若去掉8
    则末2位要么是25要么是75,前3位则任意排,有3!=6种排法
    因此若去掉8则有2*6=12个满足要求的数
    若去掉2
    则末2位只能是75,前3位任意排,有6种排法
    所以有6个满足要求
    综上所述,满足要求的五位数有18个

    三、实验过程
    (实验源码、实验结果)

    #include 
    #include 
    using namespace std;
    int main()
    {
    int a[5] = { 1,2,7,8,9 },b[4];
    while (next_permutation(a, a + 5))
    {
    for (int i = 0; i < 4; i++)
    {
    b[i] = a[i];
    }
    int sum = b[0] * 10000 + b[1] * 1000 + b[2] * 100 + b[3] * 10 + 5;
    if (sum % 75 == 0)
    cout << b[0] << b[1] << b[2] << b[3] << 5 << endl;
    }
    system("pause");
    return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    四、实验总结
    (实验心得体会)
    借助全排列函数,末尾是5,其余四位b[4]在a[5]中取,然后判断
    实验报告三 第三题
    一、实验目的
    一个小于200的自然数,被7除余2,被8除余3,被9除余1,求这个数是多少?

    二、实验内容
    (实验题目描述)
    一个小于200的自然数,被7除余2,被8除余3,被9除余1,这个数是多少?
    注意到7-2=8-3=5
    也就是说该数加上5以后可被7和8整除,也就是56的倍数
    因此这个数只可能是56-5 562-5 563-5
    经检验发现只有56*3-5=163被9除余1符合要求,因此该数为163

    三、实验过程
    (实验源码、实验结果)

    #include
    int main(){
     int i=1;
     for(;i<200;i++){
      if(i%7==2&&i%8==3&&i%9==1)
      printf("这个数是%d",i);
     }
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    四、实验总结
    (实验心得体会)
    蛮算

    实验报告四 第四题
    一、实验目的
    找数,在所有的两位数中,十位上的数字比个位上的数字要大的共有多少个?三位数中佰位比个位大的数字有多少呢?
    二、实验内容
    (实验题目描述)
    在所有的两位数中,十位上的数字比个位上的数字要大的共有多少个?三位数中佰位比个位大的数字有多少呢?
    三、实验过程
    (实验源码、实验结果)

    #include 
    int main()
    {
        int m,n,sum=0,i,a,b,c;
        scanf("%d%d",&m,&n);
        if(m>=10&&m<n&&n<=100)
        {
            for(i=m; i<=n; i++)
            {
                a=i%10;
                b=i/10;
                c=b%10;
                if(c>a)
                {
                    sum=sum+i;
                }
            }
            printf("%d",sum);
        }
        return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    三位数,改一下范围,改一下a,b,c,d(同水仙花数

    四、实验总结
    (实验心得体会)
    和水仙花数有相同原理可类比

    实验报告五 第五题
    一、实验目的
    求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字
    二、实验内容
    (实验题目描述)
    求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
    【Input】
    一行:两个数a,b。中间用一个空格隔开。1<=a<=9,1<=b<=200。
    【Output】
    计算后的结果。
    【样例输入一:】
    5 3
    【样例输出一:】
    615

    【样例输入二:】
    3 5
    【样例输出二:】
    37035

    三、实验过程
    (实验源码、实验结果)

    package com.ljy.tencent;
    import java.util.Scanner;
    public class AddNumerical
    {
        public static void main(String[] args)
        {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入一个数字:");
            int n = input.nextInt();
            System.out.println("请输入需要相加的个数:");
            int number = input.nextInt();
            input.close();
    
            //调用计算方法
            System.out.println("计算输出结果为:");
            System.out.print("s=");
            System.out.print(count(n, number));
        }
        //求和表达式以及求和
        public static int count(int n, int number)
        {
            int s = 0;//s为每一个叠数
            int sum = 0;//sum为最后的总和
            //循环从1次幂到number次幂的叠数
            for(int i = 1; i <= number; i++)
            {
                //调用形成叠数的方法
                s = coumpute(n, i);
                //利用if...else区分是否为最后一个加数,从而保证最后一个数后面不添加"+"
                if(i == number)
                {
                    System.out.print(s);
    
                }
                else
                {
                    System.out.print(s + "+");
                }
                sum += s;
            }
            System.out.print("=");
            return sum;
        }
        //叠数的形成
        public static int coumpute(int n, int number)
        {
            int m = 0;
            for(int i = 0; i < number; i++)
            {
                //从0次幂到number次幂形成叠数,如22222=2*10^4+2*10^3+2*10^2+2*10^1+2*10^0
                m += (int) (n * Math.pow(10, i));
            }
            return m;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    在这里插入图片描述

    四、实验总结
    (实验心得体会)
    好难……

    实验报告六 第六题
    一、实验目的
    按照键盘输入的数值N的大小,打印菱形
    二、实验内容
    (实验题目描述)
    按照键盘输入的数值N的大小,打印如下图形
    *
    ***
    *****
    *******
    *********
    *******
    *****
    ***
    *
    N为图形的行数。要求使用循环实现。
    【Input】
    显示的行数
    【Output】
    图形。
    【样例输入:】
    9

    三、实验过程
    (实验源码、实验结果)

    package lianxi;
    
    public class lingxing{
        public static void main(String[] args) {
            //打印菱形
            //1.
            for(int i=0;i<5;i++){
                for (int k=0;k<5-i;k++){
                    System.out.print(" ");
                }
                for(int j=0;j<2*i+1;j++){
                    System.out.print("*");
                }
                System.out.println();
            }
            //2.倒的等腰三角形
            for(int i=4;i>=0;i--){
                for (int k=0;k<5-i;k++){
                    System.out.print(" ");
                }
                for(int j=0;j<2*i+1;j++){
                    System.out.print("*");
                }
                System.out.println();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    四、实验总结
    (实验心得体会)
    对称有规律,做一半另一半改一下就好了

  • 相关阅读:
    解锁知识管理3.0,生成式人工智能洞察新时代
    安装xilinx烧写器驱动
    Python获取 小黑子 弹幕数据+制作词云分析.........
    如果查看svn的账号和密码
    容斥 C. Strange Function改编题
    跑步运动戴哪种耳机最好?跑步骨传导耳机推荐
    nginx实现路由重定向功能 避免服务器出现 404 Not Found
    Spring Cloud Eureka:服务注册与发现
    java程序设计案例教程王希军,渣本二面阿里受挫
    java防止同时多个相同请求并发问题
  • 原文地址:https://blog.csdn.net/weixin_57780589/article/details/127755215