鱼C论坛

 找回密码
 立即注册
查看: 352|回复: 5

C语言数据遍历测试

[复制链接]
发表于 2024-12-4 14:03:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.卡布列克常数6174验证

2.蒙特卡洛算法

3.冰雹猜想验证(验证范围1~100)

4.亲和数验证(验证范围1~10000)

要求数据遍历测试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-12-4 14:03:37 | 显示全部楼层
以下是针对您提到的四个问题的简要说明和实现思路:

1. **卡布列克常数6174验证**:
   - 卡布列克常数是一个有趣的数学现象。对于四位数,重复以下步骤:将数字的各位按升序和降序排列,得到两个数字,然后相减。重复这个过程,最终会得到6174。

2. **蒙特卡洛算法**:
   - 蒙特卡洛方法是一种通过随机采样来估计数学问题的数值解的方法。常用于计算圆周率π的近似值。可以通过在单位正方形中随机生成点,计算落在单位圆内的点的比例来估计π。

3. **冰雹猜想验证(验证范围1~100)**:
   - 冰雹猜想(Collatz猜想)是一个未解决的数学问题。对于任何正整数n,如果n是偶数,除以2;如果n是奇数,乘以3再加1。重复这个过程,最终会回到1。需要验证1到100的所有整数。

4. **亲和数验证(验证范围1~10000)**:
   - 亲和数是两个数的一个有趣性质:每个数的真因数之和等于另一个数。需要在1到10000的范围内寻找这样的数对。

如果您需要具体的C语言代码实现,请告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-4 14:15:13 | 显示全部楼层
具体C语言代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-4 14:15:43 | 显示全部楼层


以下是针对您提到的四个问题的C语言实现代码:

1. **卡布列克常数6174验证**:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int compare_desc(const void *a, const void *b) {
  4.     return (*(int *)b - *(int *)a);
  5. }

  6. int compare_asc(const void *a, const void *b) {
  7.     return (*(int *)a - *(int *)b);
  8. }

  9. int kaprekar_step(int num) {
  10.     int digits[4] = {num / 1000, (num / 100) % 10, (num / 10) % 10, num % 10};
  11.     qsort(digits, 4, sizeof(int), compare_desc);
  12.     int desc = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
  13.     qsort(digits, 4, sizeof(int), compare_asc);
  14.     int asc = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
  15.     return desc - asc;
  16. }

  17. void kaprekar_test() {
  18.     for (int i = 1000; i < 10000; i++) {
  19.         int num = i;
  20.         int steps = 0;
  21.         while (num != 6174 && steps < 10) {
  22.             num = kaprekar_step(num);
  23.             steps++;
  24.         }
  25.         if (num == 6174) {
  26.             printf("Number %d reaches 6174 in %d steps.
  27. ", i, steps);
  28.         }
  29.     }
  30. }
复制代码


2. **蒙特卡洛算法**:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. void monte_carlo_pi(int iterations) {
  5.     int inside_circle = 0;
  6.     for (int i = 0; i < iterations; i++) {
  7.         double x = (double)rand() / RAND_MAX;
  8.         double y = (double)rand() / RAND_MAX;
  9.         if (x * x + y * y <= 1) {
  10.             inside_circle++;
  11.         }
  12.     }
  13.     double pi_estimate = (double)inside_circle / iterations * 4;
  14.     printf("Estimated Pi: %f
  15. ", pi_estimate);
  16. }
复制代码


3. **冰雹猜想验证(验证范围1~100)**:

  1. #include <stdio.h>

  2. void collatz_test() {
  3.     for (int i = 1; i <= 100; i++) {
  4.         int num = i;
  5.         printf("Collatz sequence for %d: ", i);
  6.         while (num != 1) {
  7.             printf("%d ", num);
  8.             if (num % 2 == 0) {
  9.                 num /= 2;
  10.             } else {
  11.                 num = num * 3 + 1;
  12.             }
  13.         }
  14.         printf("1
  15. ");
  16.     }
  17. }
复制代码


4. **亲和数验证(验证范围1~10000)**:

  1. #include <stdio.h>

  2. int sum_of_divisors(int num) {
  3.     int sum = 0;
  4.     for (int i = 1; i <= num / 2; i++) {
  5.         if (num % i == 0) {
  6.             sum += i;
  7.         }
  8.     }
  9.     return sum;
  10. }

  11. void amicable_numbers_test() {
  12.     for (int i = 1; i <= 10000; i++) {
  13.         int sum1 = sum_of_divisors(i);
  14.         if (sum1 > i && sum1 <= 10000) {
  15.             int sum2 = sum_of_divisors(sum1);
  16.             if (sum2 == i) {
  17.                 printf("Amicable pair: %d and %d
  18. ", i, sum1);
  19.             }
  20.         }
  21.     }
  22. }
复制代码


这些代码片段分别实现了卡布列克常数验证、蒙特卡洛算法、冰雹猜想验证和亲和数验证。您可以将这些函数集成到一个C程序中进行测试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-4 14:15:47 | 显示全部楼层
FishC 发表于 2024-12-4 14:03
以下是针对您提到的四个问题的简要说明和实现思路:

1. **卡布列克常数6174验证**:

具体c语言代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-4 14:17:17 | 显示全部楼层


以下是针对您提到的四个问题的C语言实现代码:

1. **卡布列克常数6174验证**:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int compare_desc(const void *a, const void *b) {
  4.     return (*(int *)b - *(int *)a);
  5. }

  6. int compare_asc(const void *a, const void *b) {
  7.     return (*(int *)a - *(int *)b);
  8. }

  9. int kaprekar_step(int num) {
  10.     int digits[4] = {num / 1000, (num / 100) % 10, (num / 10) % 10, num % 10};
  11.     qsort(digits, 4, sizeof(int), compare_desc);
  12.     int desc = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
  13.     qsort(digits, 4, sizeof(int), compare_asc);
  14.     int asc = digits[0] * 1000 + digits[1] * 100 + digits[2] * 10 + digits[3];
  15.     return desc - asc;
  16. }

  17. void kaprekar_test() {
  18.     for (int i = 1000; i < 10000; i++) {
  19.         int num = i;
  20.         int steps = 0;
  21.         while (num != 6174 && steps < 10) {
  22.             num = kaprekar_step(num);
  23.             steps++;
  24.         }
  25.         if (num == 6174) {
  26.             printf("Number %d reaches 6174 in %d steps.
  27. ", i, steps);
  28.         }
  29.     }
  30. }
复制代码


2. **蒙特卡洛算法**:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. void monte_carlo_pi(int iterations) {
  5.     int inside_circle = 0;
  6.     for (int i = 0; i < iterations; i++) {
  7.         double x = (double)rand() / RAND_MAX;
  8.         double y = (double)rand() / RAND_MAX;
  9.         if (x * x + y * y <= 1) {
  10.             inside_circle++;
  11.         }
  12.     }
  13.     double pi_estimate = (4.0 * inside_circle) / iterations;
  14.     printf("Estimated Pi: %f
  15. ", pi_estimate);
  16. }
复制代码


3. **冰雹猜想验证(验证范围1~100)**:

  1. #include <stdio.h>

  2. void collatz_test() {
  3.     for (int i = 1; i <= 100; i++) {
  4.         int num = i;
  5.         printf("Collatz sequence for %d: ", i);
  6.         while (num != 1) {
  7.             printf("%d ", num);
  8.             if (num % 2 == 0) {
  9.                 num /= 2;
  10.             } else {
  11.                 num = 3 * num + 1;
  12.             }
  13.         }
  14.         printf("1
  15. ");
  16.     }
  17. }
复制代码


4. **亲和数验证(验证范围1~10000)**:

  1. #include <stdio.h>

  2. int sum_of_divisors(int num) {
  3.     int sum = 0;
  4.     for (int i = 1; i <= num / 2; i++) {
  5.         if (num % i == 0) {
  6.             sum += i;
  7.         }
  8.     }
  9.     return sum;
  10. }

  11. void amicable_numbers_test() {
  12.     for (int i = 1; i <= 10000; i++) {
  13.         int sum1 = sum_of_divisors(i);
  14.         if (sum1 > i && sum1 <= 10000) {
  15.             int sum2 = sum_of_divisors(sum1);
  16.             if (sum2 == i) {
  17.                 printf("Amicable pair: %d and %d
  18. ", i, sum1);
  19.             }
  20.         }
  21.     }
  22. }
复制代码


这些代码分别实现了卡布列克常数验证、蒙特卡洛算法、冰雹猜想验证和亲和数验证。您可以将这些函数整合到一个主程序中进行测试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 00:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表