求救~排列组合后的数据保存和传递
运行程序:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main(){
FILE*file;
int a,b,c;
file=fopen("c:\\abc.txt","w");
for(a=100;a<=200;a+=5)
for(b=100;b<=200;b+=5)
for(c=100;c<=200;c+=5)
{
printf("A=%d\tB=%d\tC=%d\t\n",a,b,c);
fprintf(file,"A=%d\tB=%d\tC=%d\t\n",a,b,c);
}
fclose(file);
}
能得到下面的排列组合结果
A=100 B=100 C=100
A=100 B=100 C=105
A=100 B=100 C=110
A=100 B=100 C=115
A=100 B=100 C=120
A=100 B=100 C=125
A=100 B=100 C=130
A=100 B=100 C=135
A=100 B=100 C=140
A=100 B=100 C=145
A=100 B=100 C=150
A=100 B=100 C=155
A=100 B=100 C=160
A=100 B=100 C=165
A=100 B=100 C=170
A=100 B=100 C=175
A=100 B=100 C=180
A=100 B=100 C=185
A=100 B=100 C=190
A=100 B=100 C=195
A=100 B=100 C=200
A=100 B=105 C=100
A=100 B=105 C=105
A=100 B=105 C=110
A=100 B=105 C=115
A=100 B=105 C=120
A=100 B=105 C=125
A=100 B=105 C=130
A=100 B=105 C=135
A=100 B=105 C=140
A=100 B=105 C=145
A=100 B=105 C=150
A=100 B=105 C=155
A=100 B=105 C=160
A=100 B=105 C=165
A=100 B=105 C=170
A=100 B=105 C=175
A=100 B=105 C=180
A=100 B=105 C=185
A=100 B=105 C=190
A=100 B=105 C=195
A=100 B=105 C=200
A=100 B=110 C=100
A=100 B=110 C=105
A=100 B=110 C=110
A=100 B=110 C=115
.
.
.
.
.
.
A=200 B=200 C=190
A=200 B=200 C=195
A=200 B=200 C=200
请问各位大虾:
如何能使程序在每取得一组(A,B,C)值后执行后面的程序(例如D=A+2,E=B+2,F=C+2,G=D+E+F),然后在文件中输出G的数值以及相应的(A,B,C)值,然后再去取一组(A,B,C)值,再做上述计算,再输出,直到所有的(A,B,C)值都取完。
最后,比较所有G值中最小的一个,输出这一G值以及与之对应的(A,B,C).
请各位大虾帮忙
感谢万分~~~
问题点数:20、回复次数:4Top
1 楼cngdzhang()回复于 2004-05-03 23:19:47 得分 10
有点奇怪
D=A+2,E=B+2,F=C+2,G=D+E+F
那么G=A+2 + B+2 + C+2=A+B+C+6 ?
如果输入文件格式是
100 100 100
会好读很多
FILE *fin,*fout;
int a,b,c;
int d,e,f,g;
int min=32767,olda,oldb,oldc;
fsacnf(fin,"%d%d%d",&a,&b,&c);
while(!feof(fin))
{
d=a+2;
e=b+2;
f=c+2;
g=d+e+f;
if(min>g)
{
g=min;
olda=a;
oldb=b;
oldc=c;
}
fsacnf(fin,"%d%d%d",&a,&b,&c);
}
printf("%d %d %d %d",min,a,b,c);
Top
2 楼Cathryn0000000(苹果雹冰oοО)回复于 2004-05-03 23:31:33 得分 10
这个问题我也一直没解决,但如果以这种100 200 113 这种格式存的,用fscanf()好像就可以吧
file=fopen("c:\\abc.txt","r");
file2=fopen("c:\\abc2.txt","w");
for(i=1;i<=200;i++){
fscanf(file,"%d%d%d",a,b,c);
d=a+2;
e=b+2;
f=c+2;
g=d+e+f;
fprintf(file2,"%d%d%d%d",g,a,b,c); /*存入另一个文件*/
}
for(i=0,temp=300;i<200;i++){
fgetpos(file2,curpos); /*计下当前流指针的位置*/
fscanf(flie2,"%d%*d%*d%*d",&g);
if(g<temp) {
temp=g;
pos=curpos;
}
}
fsetpos(file2,out);
fscanf(file,"%d%d%d%d",g,a,b,c);
printf("%d%d%d%d",g,a,b,c);
伪代码,差不多就这样,我想楼主难解决的可能就是怎么查g最小的那一组吧,只要灵活应用流文件指针,是可以办到的
Top
3 楼baoK(宝K)回复于 2004-05-04 12:19:07 得分 0
不好意思 我向问问temp=300是什么意思呢??
我是超级菜鸟 别怪我~~Top
4 楼cngdzhang()回复于 2004-05-04 12:24:24 得分 0
temp=300就是设一个尽可能大的数,让它>g
那么执行到
if(g<temp)
{
temp=g;
pos=curpos;
}
时,可以取到一个较小的g
和我的程序中的min=32767是一样的道理
我的程序中
if(min>g)
{
g=min;
要改为
if(min>g)
{
min=g;
Top




