啊这啧啧啧 发表于 2023-4-15 23:04:56

代码有些小问题,求鱼油们指点一二

int main(){
        int num;
        int l;//一个数的立方
        int sum=0;//这个立方的奇数和
       
        int m;
        int arr[]={0};
       
        printf("请输入一个整数:");
        scanf("%d",&num);
        l=pow(num,3);
        printf("%d",l);
        for(int i=1;i<=l;i+=2){//小于这个数的所有奇数
          int k=0;
          for(int j=i;j<=l;j+=2){
                  sum+=j;
                  arr=j;   //好像是数组出了问题,但感觉没写错{:10_328:}
                  k++;
                  if(sum>l){
                          sum=0;
                          k=0;
                          break;
                        }
                  if(sum==l){
                          printf("%d=",l);
                          for(m=0;m<k;m++){
                                  printf("%d+",arr);
                                }
                                if(m=k){
                                        printf("%d",arr);
                                }
                        }
                }
        }
       
        return 0;
}

sfqxx 发表于 2023-4-15 23:06:51

本帖最后由 sfqxx 于 2023-4-15 23:11 编辑


                           
这段代码是一个求立方数的奇数和等于该立方数本身的程序。但是,存在以下问题:

数组声明方式错误,应该是 int arr; 代表最多可以存储 100 个奇数。

在最后一次循环中,如果没有找到满足奇数和等于立方数的组合,应当输出“未找到满足条件的组合”。

在 if(m=k) 中,应改为 if(m==k-1),因为此时 m 的值为 k,不满足条件。

下面是修改后的代码:


#include <stdio.h>
#include <math.h>

int main() {
    int num;
    int l; // 一个数的立方
    int sum = 0; // 这个立方的奇数和
    int m;
    int arr = {0}; // 数组声明方式修正

    printf("请输入一个整数:");
    scanf("%d", &num);
    l = pow(num, 3);
    printf("%d", l);
    for(int i = 1; i <= l; i += 2) { // 小于这个数的所有奇数
      int k = 0;
      for(int j = i; j <= l; j += 2) {
            sum += j;
            arr = j;
            k++;
            if(sum > l) {
                sum = 0;
                k = 0;
                break;
            }
            if(sum == l) {
                printf("%d = ", l);
                for(m = 0; m < k - 1; m++) { // 修改输出方式
                  printf("%d + ", arr);
                }
                printf("%d\n", arr);
                return 0;
            }
      }
    }
    printf("未找到满足条件的组合\n"); // 输出未找到满足条件的组合
    return 0;
}
有用请设置最佳答案

isdkz 发表于 2023-4-15 23:47:59

您好!这里有一些您代码的问题,以及对应的解决方法:


[*]首先,您需要包含头文件 <stdio.h> 和 <math.h>,以使用 printf、scanf 和 pow 函数。

[*]然后,int arr[]={0}; 这里的数组定义是错误的。您需要定义一个具有足够容量的数组。例如,int arr = {0};。


下面是修改后的代码:

#include <stdio.h>
#include <math.h>

int main() {
    int num;
    int l; // 一个数的立方
    int sum = 0; // 这个立方的奇数和

    int m;
    int arr = {0};

    printf("请输入一个整数:");
    scanf("%d", &num);
    l = pow(num, 3);
    printf("%d\n", l);
    for (int i = 1; i <= l; i += 2) { // 小于这个数的所有奇数
      int k = 0;
      for (int j = i; j <= l; j += 2) {
            sum += j;
            arr = j;
            k++;
            if (sum > l) {
                sum = 0;
                k = 0;
                break;
            }
            if (sum == l) {
                printf("%d=", l);
                for (m = 0; m < k - 1; m++) {
                  printf("%d+", arr);
                }
                printf("%d\n", arr);
                sum = 0;
                k = 0;
                break;
            }
      }
    }

    return 0;
}

注意:这里我假设您的目标是找到一个数的立方可以表示成奇数和的形式。代码已经修改并能正常运行。但是,这个算法可能在某些情况下效率较低,您可以考虑优化算法。

狂奔的梦想 发表于 2023-4-30 23:30:04

页: [1]
查看完整版本: 代码有些小问题,求鱼油们指点一二