矜(bai)持(gei)的云拏 2024-04-07 21:59 采纳率: 81.3%
浏览 4
已结题

为什么这个值会改变?我明明没动它

如下代码,当我键入的T,a,b,m为1 1 3 5时,输出的a,b,m却为1 0 3 ,这是为什么?为什么我的b,m的值会改变?


#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int T;
    cin>>T;
    for(int i=0;i<T;i++){
        int a=0,b=0,m=0;
        int sn[]={0};
        sn[0]=0;
        cin>>a>>b>>m;
        int fs=1;
        for(int j=1;j<m;j++){
            sn[j]=(a*sn[j-1]+b) % m;
        }
        cout<<a<<" "<<b<<" "<<m<<endl;
        sort(sn,sn+sizeof(sn)/sizeof(sn[0]));
        for(int j=0;j<m;j++){
            if(sn[j]==fs) fs++;
        }
        cout<<fs<<endl;
    }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-07 21:59
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    代码中的问题在于用了固定大小的数组sn来存储序列,而没有根据输入的m动态分配数组空间。因此,当实际序列的长度超过了数组的大小时,就会导致数组越界错误。 可以通过使用动态数组vector来解决这个问题,如下所示:
    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int main(){
        int T;
        cin >> T;
        for(int i=0;i<T;i++){
            int a=0,b=0,m=0;
            vector<int> sn;
            sn.push_back(0);
            cin >> a >> b >> m;
            int fs=1;
            for(int j=1;j<m;j++){
                sn.push_back((a*sn[j-1]+b) % m);
            }
            cout << a << " " << b << " " << m << endl;
            sort(sn.begin(), sn.end());
            for(int j=0;j<m;j++){
                if(sn[j]==fs) fs++;
            }
            cout << fs << endl;
        }
        return 0;
    }
    

    在上述代码中,使用了vector类型的变量sn来存储序列,push_back()方法可以动态添加元素,不再需要限定数组大小。另外,需要将sort()方法的参数从数组名改为vector变量的begin()和end()方法,以正确排序vector中的元素。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?