鱼C论坛

 找回密码
 立即注册
查看: 1303|回复: 3

[已解决]代码有些小问题,求鱼油们指点一二

[复制链接]
发表于 2023-4-15 23:04:56 | 显示全部楼层 |阅读模式

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

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

x
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[k]=j;     //好像是数组出了问题,但感觉没写错
                    k++;
                    if(sum>l){
                            sum=0;
                            k=0;
                            break;
                        }
                    if(sum==l){
                          printf("%d=",l);
                            for(m=0;m<k;m++){
                                    printf("%d+",arr[m]);
                                }
                                if(m=k){
                                        printf("%d",arr[m]);
                                }
                        }
                }
        }
       
        return 0;
}
最佳答案
2023-4-15 23:06:51
本帖最后由 sfqxx 于 2023-4-15 23:11 编辑


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

数组声明方式错误,应该是 int arr[100]; 代表最多可以存储 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[100] = {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[k] = 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[m]);
                }
                printf("%d\n", arr[m]);
                return 0;
            }
        }
    }
    printf("未找到满足条件的组合\n"); // 输出未找到满足条件的组合
    return 0;
}
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-15 23:06:51 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sfqxx 于 2023-4-15 23:11 编辑


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

数组声明方式错误,应该是 int arr[100]; 代表最多可以存储 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[100] = {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[k] = 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[m]);
                }
                printf("%d\n", arr[m]);
                return 0;
            }
        }
    }
    printf("未找到满足条件的组合\n"); // 输出未找到满足条件的组合
    return 0;
}
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-15 23:47:59 | 显示全部楼层
您好!这里有一些您代码的问题,以及对应的解决方法:

  • 首先,您需要包含头文件 <stdio.h> 和 <math.h>,以使用 printf、scanf 和 pow 函数。
  • 然后,int arr[]={0}; 这里的数组定义是错误的。您需要定义一个具有足够容量的数组。例如,int arr[100] = {0};。


下面是修改后的代码:
#include <stdio.h>
#include <math.h>

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

    int m;
    int arr[100] = {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[k] = 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[m]);
                }
                printf("%d\n", arr[m]);
                sum = 0;
                k = 0;
                break;
            }
        }
    }

    return 0;
}

注意:这里我假设您的目标是找到一个数的立方可以表示成奇数和的形式。代码已经修改并能正常运行。但是,这个算法可能在某些情况下效率较低,您可以考虑优化算法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-4-30 23:30:04 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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