2 qq 27965507 qq_27965507 于 2015.05.30 07:50 提问

C(++)语言 碰到输出手法 不能搞定 求解答 (注 : 不用迭代 )

1.读取一个文件 链接起来 行,列;
2.利用这个链表,输出成员间的所有可能组合;
本人挤出的代码如下,供参考:

#include "stdafx.h"
#include
using namespace std;
class Teacher
{
public:
char name[20];
Teacher * tnext;
Teacher (char * name):tnext(tnext=NULL)
{
strcpy(this->name,name);
}
void Display()
{
cout<<name;
}
};
class Course
{
public:
char name[20];
Course * next;
Teacher * thead;

Course(char * name):thead(thead=NULL),next(next=NULL)
{
    strcpy(this->name,name);
}
void Display()
{
    cout<<name;
}

};

int _tmain(int argc, _TCHAR* argv[])
{
Course * head=NULL,*before;
Teacher * te=NULL,* pre;
FILE fp=fopen("文件test.txt","r");
do
{
char name[20];
fscanf(fp,"%s",name);
Course * temp= new Course (name);
do
{
fscanf(fp,"%s",name);
te=new Teacher (name);
if(strncmp(te->name,"end",3)==0)break;
else
{
if(NULL == temp->thead)
temp->thead=te;
else{pre->tnext=te;}
pre=te;
}
}
while (strncmp(te->name,"end",3)!=0);
if (NULL==head)
head= temp;
else
{
before->next=temp;
}
before=temp;
}
while(!feof(fp));
long int a=0;
Course * k=head,*u,*v,*w;
Teacher * p,
q,*r,*s;
for(p=k->thead;p!=NULL;p=p->tnext)
for(q=k->next->thead;q!=NULL;q=q->tnext)
for(r=k->next->next->thead;r!=NULL;r=r->tnext)
for(s=k->next->next->next->thead;s!=NULL;s=s->tnext)
{
a+=1;
printf ("%ld",a);
p->Display();q->Display();r->Display();s->Display();
printf("\n");
}

printf("=================================\n");

return 0;

}
输出没有扩展性
本人尝试过利用 类似进位的思想来解答,在行链表向下方访问并到达NULL时下个结点向一位,由此输出所有的可能组合;估计类的成员结构组成欠缺;
​如果文件格式如下
语文 李老师 黄老师 华老师 end
数学 黄老师 金老师 刘老师 end
国文 赵老师 钱老师 孙老师 end
算数 花老师 月老师 吴老师 end
则输出有81中组合:
如:李黄赵花;李黄赵月;李黄赵吴;李黄钱花;李黄钱月;李黄钱吴;李黄孙花;李黄孙月;李黄孙吴;。。。。。。。;
请给出通用性的手法 请不要使用数据库 数组 迭代等之类可能更便捷的方法 只能增加些类成员并输出出来

4个回答

qq_27965507
qq_27965507   2015.05.30 07:53

原文件格式如下
语文 李老师 黄老师 华老师 end
数学 黄老师 金老师 刘老师 end
国文 赵老师 钱老师 孙老师 end
算数 花老师 月老师 吴老师 end

lzp_lrp
lzp_lrp   Ds   Rxr 2015.05.30 10:25

这应该是个排列组合的问题,
输出是以下这样吗?

语文 李老师 黄老师 华老师 金老师 刘老师 赵老师 钱老师 孙老师 花老师 月老师 吴老师

qq_27965507
qq_27965507 你可以改动我的数据 结构 但是不能用更超越的工具或许函数之类 因为我只知道这些 目前。。
2 年多之前 回复
qq_27965507
qq_27965507 回复PB人生: 不能用迭代了。。。
2 年多之前 回复
qq_27965507
qq_27965507 思路跟进位有点类似 纵向遍历 到达NULL下一位进一 本位继续遍历 进位 直到下一位达到NULL 再进一位 继续遍历 直到横向链表的末尾;我正在试图表达出来;限于C,C++的思路来表达;如果你记得话 或许您圈子里有这方面朋友;谢谢
2 年多之前 回复
lzp_lrp
lzp_lrp 回复qq_27965507: 用迭代不是方便些?
2 年多之前 回复
qq_27965507
qq_27965507 回复PB人生: 其它的我都不懂比如数据库 我就知道链表 被需要这样输出,很急; 理论上这样是可以实现的 如果在B类里增加成员 应该可以实现输出。
2 年多之前 回复
lzp_lrp
lzp_lrp 回复qq_27965507: 这种应该用数组来实现,用链表不合适,最简单的方法是放在数据库里,直接select就行,呵呵
2 年多之前 回复
qq_27965507
qq_27965507 李黄赵花;李黄赵月;李黄赵吴;李黄钱花;李黄钱月;李黄钱吴;李黄孙花;李黄孙月;李黄孙吴;。。。。。。。;
2 年多之前 回复
qq_27965507
qq_27965507 想输出的意思是 每门课程选一个老师的所有组合 回答里给的范例有 81种输出
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.05.30 13:28

代码问题比较多,建议调试。
如果你肯采纳我的两个问题的回答,我可以帮你调试下。

qq_27965507
qq_27965507 姑娘 你是逗我吗?我要输出手法 不是调试啊 倘若纵横变化为n,m都能实现
2 年多之前 回复
chaobo_lu
chaobo_lu   2015.06.03 22:46

原文是:
语文 李老师 黄老师 华老师 end
数学 黄老师 金老师 刘老师 end
国文 赵老师 钱老师 孙老师 end
算数 花老师 月老师 吴老师 end

组合规则是把每门课和所有老师的所有可能组合,还是把所有字两辆组合,要求不重复啊?
没弄明白要求是啥。

Csdn user default icon
上传中...
上传图片
插入图片