标题:新手求助,程序运行不了,大家帮忙给改改吧!急!!!
只看楼主
susurra
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-6
结帖率:50%
已结贴  问题点数:6 回复次数:3 
新手求助,程序运行不了,大家帮忙给改改吧!急!!!
这个是我的一份作业,输入两个长度相等的数组,字符串数组是姓名,另一组是销售额。老师讲的思路是要先分别把两个数组复制,然后再处理复制的两个数组,首先要把字符串数组的重复项删掉然后按字母顺序排序,然后根据姓名检测每一个人的销售额,每个人的销售额产生一个新数组,然后求每个人的销售额的平均数,方差及中位数。下面是我写的代码,请高手们帮我改改,尽量按照我说的这个思路来改,谢谢!

#include <stdio.h>
#include <iostream>
#include <cmath>
#include <string>
#include <vector>
#include <stdlib.h>
#include<algorithm>

using namespace std;

double mean(vector<double>v)
      {
        double sum=0.0;   
        for(int i=0;i<v.size();i++)
         {
          sum=sum+v[i];
         }
         return (sum/v.size());
      }
           
double var(vector<double>v)
       {
         double sum2=0.0;
         for (int i=0;i<v.size();i++)
         {
          sum2=sum2+(v[i]-mean(v))*(v[i]-mean(v));
         }
         return (sum2/v.size());
       }

double median(vector<double>v)
       {
         int n = v.size();
         if(n%2==0)
           {
            return (v[n/2-1]+v[n/2])/2;
           }
         else
           {
            return (v[(n-1)/2]);
           }
       }
int main ()
{
        cout. setf ( ios :: fixed );
        cout. precision (2);
        int n;
        string name;
        char tecla;
        cin>>n;
        vector<string> x(n),x1;
        vector<double> y(n),y1;
        for (int i=0;i<n;i++)
        {
                cin>>x[i];
                cin>>y[i];
        }
        for (int i=0;i<x.size();i++)
        {
                x1[i]=x[i];
                y1[i]=y[i];
        }
        sort(x1.begin(),x1.end());  //姓名排序
        for(int i=0;i<x1.size()-1;i++)  // 删除X1数组中的重复项,这个部分输出有点问题 ,还是会出现个别重复项
        {
                if(x1[i]==x1[i+1])
                {
                        n--;
                        for (int j=i+1;j<n;j++)
                        {
                                x1[j]=x1[j+1];
                        }
                        x1.erase(x1.end()-1);
                }
        }
        cout<<"*******"<<endl;
        int pos=0,i=0;
        while(i!=x1.size())
        {
          name=x1[i];
          while (pos!=x1.size()&& x[pos]==name) //  找出相同名字的位置
            {
             y1.push_back(y[pos]);  //  把每一个名字重复后产生的数据组成一个新的数组
             pos++;
            }
          sort(y1.begin(),y1.end());
          double m=mean(y1);
          double v=var(y1);
          double med=median(y1);
          cout<<x1[i]<<m<<" "<<v<<" "<<med<<endl;  //循环输出每个不同名字的平均数等计算结果
          i++;
        }
        cin>>tecla;
        return 0;
}
搜索更多相关主题的帖子: 平均数 中位数 include 检测 姓名 
2012-02-08 10:33
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
得分:3 
程序怎么运行不了?是崩溃还是出错?

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-02-08 12:40
susurra
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-2-6
得分:0 
回复 2楼 BianChengNan
崩溃。
2012-02-08 19:41
xingzhian
Rank: 2
等 级:论坛游民
帖 子:14
专家分:54
注 册:2011-3-22
得分:3 
运行到:
 for (int i=0;i<x.size();i++)
 {
                x1[i]=x[i];
                y1[i]=y[i];
  }
这里出错了,是x1,y1越界了,
如果是vector,可以这样。
x1.clear();
y1.clear();
x1 = x;
y1 = y;
这样就可以赋值了。
2012-02-10 14:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360574-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.181116 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved