江老湖了 2022-03-19 22:28 采纳率: 0%
浏览 16

PIPIOJ 1510 换座位问题

​问题链接PIPIOJ
思路:多组输入字符串(数组),交换指定两行字符串的方法通过swap和strcpy实现(c语言没有alth库需要定义函数swap)。注意:数组大小不能太小否则会数组越界,段错误。
代码如下:

#include <stdio.h>
#include <string.h>

void swap(char *a1,char*a2){
    char c[100];
    strcpy(c,a1);
    strcpy(a1,a2);
    strcpy(a2,c);
}
int main(){
    int n,m;
    scanf("%d %d\n",&n,&m);
    char arr[100000][100]={0};
    for(int i=0;i<n;i++){
        gets(arr[i]);
    }
    for(int i=1;i<=m;i++){
        int n1,n2;
        scanf("%d %d",&n1,&n2);
        swap(arr[n1-1],arr[n2-1]);
    }
    for(int i=0;i<n;i++){
        printf("%s\n",arr[i]);
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 关注

    你题目是什么
    char arr[100000][100]={0};
    arr数组太大了
    函数内局部变量的数组长度不能太大
    改成全部变量的数组即可.
    或者用 malloc()动态分配内存空间
    局部变量是在程序运行栈上自动分配的,一般运行栈的大小是比较小的,大约即1~2MB,如果你定义一个很大的局部变量,很可能导致栈溢出。
    而全局变量是在数据段中在程序加载时自动分配,大小可以定义的很大,只要你的电脑内存足够大。

    你题目的解答代码如下:

    #include <stdio.h>
    #include <string.h>
    
    void swap(char *a1,char*a2){
        char c[100];
        strcpy(c,a1);
        strcpy(a1,a2);
        strcpy(a2,c);
    }
    char arr[100000][100]={0};//改成全局变量
    int main(){
        int n,m;
        scanf("%d %d\n",&n,&m);
        for(int i=0;i<n;i++){
            gets(arr[i]);
        }
        for(int i=1;i<=m;i++){
            int n1,n2;
            scanf("%d %d",&n1,&n2);
            swap(arr[n1-1],arr[n2-1]);
        }
        for(int i=0;i<n;i++){
            printf("%s\n",arr[i]);
        }
        return 0;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月19日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络