nobugdebug 2023-02-22 13:11 采纳率: 92.7%
浏览 31
已结题

C++,字数统计。运行出错。

C++。字数统计。
如图
运行出错。请问该怎么改呢?环境是不是也要重新配置一下?

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a[10001];                                   //上一行行末零的个数记入数组
    int i,j;
    int n,m,t;                                      //n行,m列,t段
    while(scanf("%d%d%d",&n,&m,&t)!=EOF)
    {
        int count = 0;
        int space;                                   //记录有两个空格打头的行之前行的行末空格数
        int k = 0;                                   //记录每行行末空格数
        int g = 0;                                   //段落编号,第一段除外
        memset(a,0,sizeof(a));
        int temp;                                     //读取数据,不用数组记录整个文章
                                                        //对第一行独立处理,第一行必定为一段的开头
        for(i=0;i<m;i++)
        {
            scanf("%d",&temp);
            if(!temp)                                 //0
            {
                count++;
                space++;
            }
            else 
                space=0;
        } 
                                                        //第一行的开头必为两个零
        count -= 2;
        for ( i = 1; i < n; i++)
        {
            k = 0;
            for(j = 0;j < m; j++)
            {   
                                                         //记录每行行末的空格数,所以每次都要清零
                scanf("%d",&temp);
                if(!temp)
                {
                    count++;
                    k++;
                }
                else k = 0;
                                                        //读取的是开头两个数组,并且两个数据均为零
                if(j == 1&& k == 2 )
                                                        //一段的开始,将上一行行末零的个数记入数组
                a[g++] = space;
            }
                                                        //每次仅保存上一行末零的个数
            space = k;
        }
                                                        //整段最后的零的个数必减,并且去掉每段开头的两个零
        count = count - (--t)*2-space;
        sort(a,a+g);
                                                         //利用贪心,减去最多的零的个数
        while(t--)count = count - a[--g];
        cout<<count<<endl;
        
    }
}

img

  • 写回答

2条回答 默认 最新

  • 我爱OJ 2023-02-22 13:55
    关注

    该回答引用ChatGPT
    #include<stdio.h>为标准C语言头文件,应改成#include<bits/stdc++.h>,望采纳

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a[10001];                                   //上一行行末零的个数记入数组
        int i,j;
        int n,m,t;                                      //n行,m列,t段
        while(scanf("%d%d%d",&n,&m,&t)!=EOF)
        {
            int count = 0;
            int space;                                   //记录有两个空格打头的行之前行的行末空格数
            int k = 0;                                   //记录每行行末空格数
            int g = 0;                                   //段落编号,第一段除外
            memset(a,0,sizeof(a));
            int temp;                                     //读取数据,不用数组记录整个文章
                                                            //对第一行独立处理,第一行必定为一段的开头
            for(i=0;i<m;i++)
            {
                scanf("%d",&temp);
                if(!temp)                                 //0
                {
                    count++;
                    space++;
                }
                else 
                    space=0;
            } 
                                                            //第一行的开头必为两个零
            count -= 2;
            for ( i = 1; i < n; i++)
            {
                k = 0;
                for(j = 0;j < m; j++)
                {   
                                                             //记录每行行末的空格数,所以每次都要清零
                    scanf("%d",&temp);
                    if(!temp)
                    {
                        count++;
                        k++;
                    }
                    else k = 0;
                                                            //读取的是开头两个数组,并且两个数据均为零
                    if(j == 1&& k == 2 )
                                                            //一段的开始,将上一行行末零的个数记入数组
                    a[g++] = space;
                }
                                                            //每次仅保存上一行末零的个数
                space = k;
            }
                                                            //整段最后的零的个数必减,并且去掉每段开头的两个零
            count = count - (--t)*2-space;
            sort(a,a+g);
                                                             //利用贪心,减去最多的零的个数
            while(t--)count = count - a[--g];
            cout<<count<<endl;
            
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题