求救~排列组合后的数据保存和传递

baoK 2004-05-03 11:09:12
运行程序:

#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).

请各位大虾帮忙

感谢万分~~~
...全文
32 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cngdzhang 2004-05-04
temp=300就是设一个尽可能大的数,让它>g
那么执行到
if(g<temp)
{
temp=g;
pos=curpos;
}
时,可以取到一个较小的g

和我的程序中的min=32767是一样的道理

我的程序中
if(min>g)
{
g=min;
要改为
if(min>g)
{
min=g;


  • 打赏
  • 举报
回复
baoK 2004-05-04
不好意思 我向问问temp=300是什么意思呢??



我是超级菜鸟 别怪我~~
  • 打赏
  • 举报
回复
Cathryn0000000 2004-05-03
这个问题我也一直没解决,但如果以这种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最小的那一组吧,只要灵活应用流文件指针,是可以办到的
  • 打赏
  • 举报
回复
cngdzhang 2004-05-03
有点奇怪
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);


  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-05-03 11:09
社区公告
暂无公告