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中组合:
如:李黄赵花;李黄赵月;李黄赵吴;李黄钱花;李黄钱月;李黄钱吴;李黄孙花;李黄孙月;李黄孙吴;。。。。。。。;
请给出通用性的手法 请不要使用数据库 数组 迭代等之类可能更便捷的方法 只能增加些类成员并输出出来

查看全部
qq_27965507
qq_27965507
2015/05/29 23:50
  • c
  • 组合输出
  • 点赞
  • 收藏
  • 回答
    私信

4个回复