| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:【c++ 求助】一个有关读写文件及数组操作的编程任务
取消只看楼主 加入收藏
tan314061834
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-5-19
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
【c++ 求助】一个有关读写文件及数组操作的编程任务
本人大一菜鸟,上学期C++期末考试勉强及格,时过半年,基本已经忘光。于是老师布置的程序设计任务基本无望独立完成。。
求高手解救!
该任务给了一个txt文件,里面是2列n行的数据(看得都头晕),比如第一行是566和723,第二行是688和655,以此类推,下面也会出现566和其他数字对应(下面同行的两个数字的关系就称为合作吧。)。每个数字都代表一个用户,题目有两个要求:先按与用户合作的人数从多到少排序,并写入新文件,也就是看哪个数字合作数字多,多的排在前面;然后再计算暂未合作的用户节点对的共同邻居数目,按从大到小排序,并写入新文件。这个的意思是比如566和723,566和700合作了,但是566没有和811直接合作,而723,700都和811直接合作,那么566和811这个暂未合作的用户节点对的共同邻居数目就是2了。


 好了,各位大神们,基本上就是这样了。对于我这种战五渣来说,编这个程序是不可能的事情。。。
所以。。。救救我呗。。。
附上txt文件
CA-GrQc.rar (91.6 KB)
搜索更多相关主题的帖子: 程序设计 用户 
2014-05-19 14:09
tan314061834
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-5-19
收藏
得分:0 
#include <fstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <bitset>
using namespace std;
 
const int kMaxID = 1000;
 
typedef struct comp
{
    bool operator()(const pair<int, int>& p1, const pair<int, int>& p2) const
    {//按照合作伙伴的数量从大到小排序,如果数目相同,则id号小的排在前面
        return ( p1.second > p2.second
            || (p1.second == p2.second && p1.first < p2.first) );
    }
}comp_t;
 
//邻居
typedef struct co_pair
{
    int i1; //第一个
    int i2; //第二个
    co_pair(int _i1, int _i2)
        : i1(_i1), i2(_i2)
    {}
}co_pair_t;
 
typedef struct comp1
{
    bool operator()(const pair<co_pair, int>& p1, const pair<co_pair, int>& p2) const
    {//按照邻居的数量从大到小排序,如果数目相同,则第一个客户的id号小的排在前面,
        //如果第一个id号相同,则第二个id号小的排在前面
        return ( p1.second > p2.second
            || (p1.second == p2.second && (p1.first.i1 < p2.first.i1
                                                                  || (p1.first.i1 == p2.first.i1
                                                                      && p1.first.i2 < p2.first.i2) )));
    }
}comp1_t;
 
int main()
{
    //文件
    ifstream f1;
    ofstream f2, f3;
    //1.txt为输入,可以自行设置
    f1.open("C:/1.txt", ios::in);
    //2.txt输出第一个要求
    f2.open("C:/2.txt", ios::out | ios::trunc);
    //3.txt输出第二个要求
    f3.open("C:/3.txt", ios::out | ios::trunc);
 
    //counter表示一个客户同几个其它的客户有合作,pair的first表示客户的id,second表示合作数
    vector<pair<int, int> > counter(kMaxID+1);
    size_t i;
    for (i = 0; i < counter.size(); i++)
    {
        counter[i].first = i;
        counter[i].second = 0;
    }
    //coordinators[i]表示同这个客户有关联的客户,使用位图存储,如果位为1,则表示两个客户有合作
    vector<bitset<kMaxID> > coordinators(kMaxID+1);
 
    //读入f1文件
    int i1, i2;
    while (f1 >> i1 >> i2)
    {
        if (coordinators[i1].test(i2) == 0)
        {
            counter[i1].second++;
        }
        if (coordinators[i2].test(i1) == 0)
        {
            counter[i2].second++;
        }
        coordinators[i1].set(i2);
        coordinators[i2].set(i1);
   }
     
 
    //输出f2文件
    //排序
    sort(counter.begin(), counter.end(), comp_t());
    for (i = 0; i < counter.size() && counter[i].second > 0; i++)
    {
        f2 << counter[i].first << " " << counter[i].second << endl;
    }
 
 
    //计算f3文件的输出
    //f3_outs表示两个客户有多少个邻居
    vector<pair<co_pair, int> > f3_outs;
    bitset<kMaxID> b;
    size_t bits_set = 0;
    for (size_t j = 0; j < counter.size() && counter[j].second > 0; j++)
    {
        for (size_t k = j+1; k < counter.size() && counter[k].second > 0; k++)
        {
            int i1 = counter[j].first;
            int i2 = counter[k].first;
            if (coordinators[i1].test(i2) == 0)
            {//如果两个客户之间没有合作关系,看看它们是否有邻居关系
                b = coordinators[i1] & coordinators[i2];
                if ((bits_set = b.count()) > 0)
                {//有邻居关系
                    f3_outs.push_back(make_pair<co_pair, int>(co_pair(i1, i2), (int)bits_set));
                }
            }
        }
    }
     
    //输出f3
    sort(f3_outs.begin(), f3_outs.end(), comp1_t());
    for (i = 0; i < f3_outs.size() && f3_outs[i].second > 0; i++)
    {
        f3 << f3_outs[i].first.i1 << " " << f3_outs[i].first.i2 << " " << f3_outs[i].second << endl;
    }
 
    f1.close();
    f2.close();
    f3.close();
    return 0;
}
程序可以运行,可是为什么生成的文件是空白文档?求助
2014-05-20 13:48
快速回复:【c++ 求助】一个有关读写文件及数组操作的编程任务
数据加载中...
 
   



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

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