C#上机练习66-70

news/2024/11/28 0:43:00/

66.数组x中存有20个四位整数,请编制函数,求出正整数的个数tn。以及各位数字之和是偶数的数的个数tc,以及满足条件的这些数的算术平均ta.,将tn,tc,ta在控制台输出。

67.数组x中存有20个四位整数,请编制函数,求出正整数的个数tn。以及百位数字大于十位数字数的个数tc,以及满足条件的这些数的算术平均ta.,将tn,tc,ta在控制台输出。

68.哥德巴赫猜想之一是任何一个大于5的偶数都可以表示为两个素数之和。验证这一论断。

69.用牛顿迭代法求方程2x3+4x2-7x-6=0在x=1.5附近的根。

70.编程序求2~10000以内的完全数(一个数的因子(除了这个数本身)之和等于该数本身)

66、在 AnalyzeNumbers 函数中,我们遍历数组 x 中的每个整数,并根据以下规则进行计数:

  • 如果一个数是正整数,则 tn(正整数的个数)加1,同时该数的值加到正整数的总和中。
  • 对于每个数,我们计算其各位数字之和。如果这个和为偶数,则 tc(各位数字之和为偶数的数的个数)加1。

最后,我们计算正整数的算术平均值 ta,它是正整数总和除以正整数的个数。

Main 方法定义了一个示例数组 x,调用 AnalyzeNumbers 函数进行分析,并输出结果。代码如下:

 private static void Main(string[] args)
 { // 示例数组x,包含20个四位整数
     int[] x = { 1234, 2345, 3456, 4567, 5678, 6789, 7890, 8901, 9012, 1011,1112, 2123, 3134, 4145, 5156, 6167, 7178, 8189, 9190, 123 };

     var results = AnalyzeNumbers(x); // 调用函数进行分析

     // 输出结果
     Console.WriteLine($"正整数的个数 tn: {results.tn}");
     Console.WriteLine($"各位数字之和是偶数的数的个数 tc: {results.tc}");
     Console.WriteLine($"满足条件的数的算术平均值 ta: {results.ta:F2}");
 }

 // 函数用于计算正整数的个数、各位数字之和为偶数的数的个数,以及满足条件的数的算术平均值
 static (int tn, int tc, double ta) AnalyzeNumbers(int[] x)
 {
     int tn = 0; // 正整数的个数
     int tc = 0; // 各位数字之和为偶数的数的个数
     double sumOfPositiveNumbers = 0; // 正整数的和
     int countOfPositiveNumbers = 0; // 正整数的个数

     foreach (int number in x)
     {
         // 检查数是否为正整数
         if (number > 0)
         {
             tn++;
             sumOfPositiveNumbers += number;
             countOfPositiveNumbers++;
         }

         // 检查各位数字之和是否为偶数
         int sumOfDigits = number.ToString().Sum(digit => int.Parse(digit.ToString()));
         if (sumOfDigits % 2 == 0)
         {
             tc++;
         }
     }

     // 计算算术平均值
     double ta = countOfPositiveNumbers > 0 ? sumOfPositiveNumbers / countOfPositiveNumbers : 0;

     return (tn, tc, ta);
 }

67、这个跟上一个差不多,我们只需要改下判断就可以,代码如下:

68、我们可以在100000内找,将检查每一个大于5且小于一个给定上限(在这个示例中为1000000)的偶数,确保它能够被表示为两个素数之和,代码如下:

private static void Main(string[] args)

    int limit = 1000000; // 我们检查的偶数上限
    bool[] isPrime = new bool[limit + 1]; // 用于标记索引值是否为素数的数组

    // 初始化素数标记数组
    for (int i = 2; i <= limit; i++)
    {
        isPrime[i] = true;
    }

    // 筛选出小于或等于limit的素数
    for (int i = 2; i * i <= limit; i++)
    {
        if (isPrime[i])
        {
            for (int j = i * i; j <= limit; j += i)
            {
                isPrime[j] = false;
            }
        }
    }

    // 验证哥德巴赫猜想
    for (int i = 6; i <= limit; i += 2) // 从6开始检查每一个偶数
    {
        bool found = false;
        for (int j = 2; j <= i / 2; j++) // 对于每一个偶数,找到两个素数之和等于它的素数
        {
            if (isPrime[j] && isPrime[i - j]) // 如果两个素数都是素数
            {
                Console.WriteLine($"{i} = {j} + {i - j}"); // 输出结果
                found = true;
                break; // 找到一对素数后,跳出循环
            }
        }

        if (!found)
        {
            Console.WriteLine($"哥德巴赫猜想在 {i} 处失败。");
            break;
        }
    }
}

69、我们定义几个函数,然后调用,代码如下:

Function 方法返回方程 2x^3 + 4x^2 - 7x - 6 的值,Derivative 方法返回方程的导数 6x^2 + 8x - 7 的值。NewtonRaphson 方法通过迭代更新 x 的值,直到满足容差条件或达到最大迭代次数。程序的输出是迭代法找到的根。

private static void Main(string[] args)
{
    double initialGuess = 1.5; // 初始猜测值
    double tolerance = 1e-7; // 容忍误差
    int maxIterations = 1000; // 最大迭代次数

    double root = NewtonRaphson(initialGuess, tolerance, maxIterations);
    Console.WriteLine($"方程 2x^3 + 4x^2 - 7x - 6 = 0 在 x = 1.5 附近的根为: {root}");
}

static double NewtonRaphson(double initialGuess, double tolerance, int maxIterations)
{
    double x = initialGuess;
    double fx = Function(x);
    double dfx = Derivative(x);

    int iteration = 0;
    while (Math.Abs(fx) > tolerance && iteration < maxIterations)
    {
        double xNext = x - fx / dfx;
        fx = Function(xNext);
        dfx = Derivative(xNext);
        x = xNext;
        iteration++;
    }

    if (iteration >= maxIterations)
    {
        Console.WriteLine("未能在迭代次数内找到解,可能需要增加迭代次数或检查初始猜测值。");
    }

    return x;
}

static double Function(double x)
{
    return 2 * Math.Pow(x, 3) + 4 * Math.Pow(x, 2) - 7 * x - 6;
}

static double Derivative(double x)
{
    return 6 * Math.Pow(x, 2) + 8 * x - 7;
}

70、

IsPerfect 函数检查给定的整数 number 是否是完全数。它通过累加所有小于或等于 number 一半的因子来实现这一点。如果因子之和等于 number 本身,则返回 true,表示这是一个完全数;否则返回 false

主方法 Main 中的循环遍历从2开始到10000的所有整数,并调用 IsPerfect 函数来检查每个数是否是完全数。如果是,程序将其输出到控制台

private static void Main(string[] args)
{
    Console.WriteLine("2到10000之间的完全数:");
    for (int i = 2; i <= 10000; i++)
    {
        if (IsPerfect(i))
        {
            Console.WriteLine(i);
        }
    }
}

// 判断一个数是否为完全数的函数
static bool IsPerfect(int number)
{
    int sum = 0;
    for (int i = 1; i <= number / 2; i++) // 只需检查到一半即可
    {
        if (number % i == 0)
        {
            sum += i;
        }
    }
    return sum == number; // 如果因子之和等于数本身,则为完全数
}


http://www.ppmy.cn/news/1550474.html

相关文章

直接调用本地API(NTAPI)

文章目录 Windows操作系统中的功能调用流程直接调用NTAPI的重要性 Windows操作系统中的功能调用流程 在Windows操作系统中&#xff0c;应用程序与操作系统内核之间的交互是通过一系列精心设计的函数调用流程来实现的。让我们以一个常见的操作——创建文件为例&#xff0c;来详…

Windows系统安装docker教程

使用WSL 2安装docker 一.安装wsl2 1.在任务管理器中&#xff0c;检查系统虚拟化是否开启 ​ 2.以管理员身份运行cmd. 3.输入&#xff1a;wsl --install 4.启用wsl功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart …

基于 Spring AOP (面向切面编程) 的切面类--自定义方法注解的方式打印日志

java每日一学 ---- 面向切面编程 怎么通过方法注解的方式打印日志呢&#xff1f;自定义注解 1、首先定义一个ExecuteLog 注解类 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface ExecuteLog {/*** 执行方法的描述&#xff0c;默认方法名**…

计算机网络 第4章 网络层

计算机网络 &#xff08;第八版&#xff09;谢希仁 第 4 章 网络层4.2.2 IP地址**无分类编址CIDR**IP地址的特点 4.2.3 IP地址与MAC地址4.2.4 ARP 地址解析协议4.2.5 IP数据报的格式题目2&#xff1a;IP数据报分片与重组题目&#xff1a;计算IP数据报的首部校验和(不正确未改) …

SQL for XML

关系数据模型与SQL SQL for XML 模式名功能RAW返回的行作为元素&#xff0c;列值作为元素的属性AUTO返回表名对应节点名称的元素&#xff0c;每列的属性作为元素的属性输出输出&#xff0c;可形成简单嵌套结构EXPLICIT通过SELECT语法定义输出XML结构PATH列名或列别名作为XPAT…

C++中虚继承为什么可以解决菱形继承的数据冗余问题

在C中菱形继承会有数据冗余的问题发生&#xff0c;我们可以使用虚继承来解决&#xff0c;那虚继承的原理是什么&#xff0c;为什么它可以解决这个问题。 菱形继承的数据冗余问题 class A { public:int data; };class B : public A {};class C : public A {};class D : public…

eduSRC挖洞思路

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…

重写get方法导致json序列化之后值改变的问题

重写get方法导致json序列化之后值改变的问题 问题描述 在开发中&#xff0c;我发现有一个接口某一个字段返回的值和数据库中的实际值并不一样 数据库中值: id diameter 1 10接口返回值: {"id": 1,"diameter": 5 }问题排查 发现&#xff0c;在getDiame…