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

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

日期 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 <stdio.h>
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;
}

在这里插入图片描述

四、实验总结
(实验心得体会)
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 <iostream>
#include <algorithm>
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;
}

在这里插入图片描述

四、实验总结
(实验心得体会)
借助全排列函数,末尾是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<stdio.h>
int main(){
 int i=1;
 for(;i<200;i++){
  if(i%7==2&&i%8==3&&i%9==1)
  printf("这个数是%d",i);
 }
 return 0;
}

在这里插入图片描述

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

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

#include <stdio.h>
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;

}

在这里插入图片描述

三位数,改一下范围,改一下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;
    }
}

在这里插入图片描述

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

实验报告六 第六题
一、实验目的
按照键盘输入的数值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();
        }
    }
}

在这里插入图片描述

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

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佳美不ERROR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值