该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。
#include
int n=0;
int rest[7][7]; //全局声明,以供全局调用
int main()
{
void perm(int list[],int ,int );
int list[]={1,2, 3,4,5,6,7}; //定义一个数组,用数字1-7来表示星期几
int i,j;
char ss[7][20]={"赵","钱","孙","李","周","吴","陈"}; //
printf("===========================欢迎使用排班系统===================================\n");
printf("请输入下列人选选择休息的可能时间:\n");
printf("1.请按赵、钱、孙、李、周、吴、陈的顺序输入休息每个人的时间\n");
printf("2.输入星期时,请直接输入数字,如要输入'星期一',就用'1'代替,以此类推\n");
printf("3.星期与星期之间用空格隔开,每输入完一个人的休息日,在其后输入0,再按回车继续下一人\n"); //初始操作界面
for(i=0;i<7;i++)
{
printf("%s;",ss[i]); //按照字符数组中各个字符的顺序依次输出字符数组中的字符
for(j=0;j<7;j++)
{
scanf("%d",&rest[i][j]); //输入选择的休息时间
if(rest[i][j]==0) //倘若输入了-1,则停止对当前保安选择休息时间的输入,显示下一名保安出来
break;
}
}
printf("\n\n\n");
perm(list,0,6); //0-6为数组list[]的下标范围
printf("total:%d\n",n); //n一开始为零,用来显示方案可能数
getchar();
getchar();
return 0;
}
void perm(int list[],int k,int m) //无需返回,调用该函数直接显示方案
{
void swap(int *a, int *b);
int i;
int j;
if(k>m)
{
for (i=0;i<7;i++)
{
for (j=0;j<7;j++)
{
if (rest[i][j]==0)
return;
if (rest[i][j]!=list[i])
continue;
if (rest[i][j]==list[i])
break;
}
}
n++;
printf("Solution:%d\n",n);
printf("赵 钱 孙 李 周 吴 陈\n");
printf("=============================================================\n");
for(i=0;i<=m;i++)
{
switch (list[i])
{
case 1: printf("星期一 ");
break;
case 2: printf("星期二 ");
break;
case 3: printf("星期三 ");
break;
case 4: printf("星期四 ");
break;
case 5: printf("星期五 ");
break;
case 6: printf("星期六 ");
break;
case 7: printf("星期日 ");
break;
default:
break;
}
}
printf("\n\n\n");
}
else
{
for(i=k;i<=m;i++)
{
swap(&list[k],&list[i]);
perm(list,k+1,m);
swap(&list[k], &list[i]);
}
}
}
void swap(int *a, int *b) //利用指针用于交换的一个函数,在perm函数中被调用
{
int m;
m=*a;
*a=*b;
*b=m;
}