2个小问题
Function是从输入中的数字找两个数字的和等于最后一个数字(Function已解决,现在解决两个输出问题)
第一个,加入从文件读取两行内容。
第一行:1,2,3,4,5,6,7,;8
第二行:1,2,3,4,5,6,7,8,9;11
怎么分行输出在屏幕上
1,7;2,6;
2,9;4,7;5,6
第二个,假如输入中有一行是1,2,3;10
怎么输出NULL
(因为不能if(i+j!=last) print(NULL) 那样的话会出现NULL;NULL;NULL;)
多谢
[解决办法]
- C/C++ code
//数字配对问题,给你一串正整数和一个数字X,输出所有两者之和等于X的配对。输出的数字不能重复,并且按顺序(按顺序的意思,比如有1,4和2,3就把1的数组放前面)//从文件读取输入。文件将包含带有逗号分割的数串然后一个分号外带X。//忽略所有的空行,如果没有配对就输出NULL//请用穷举法来写//举例,//输入文件,input.txt//1,2,3,4,5,6;5//2,4,5,6,9,11,15;20////1,2,3,4;50//输出显示//1,4;2,3//5,15;9,11//NULL#include <stdio.h>#include <string.h>#define MAXN 100#define MAXCHARS 1000char s[MAXCHARS];int buf[MAXN];char *p;int v,n,k,L,i,last,j;FILE *f;void main() { f=fopen("input.txt","r"); if (NULL==f) { printf("Can not open file input.txt!\n"); return; } while (1) { if (NULL==fgets(s,MAXCHARS,f)) break; if ('\n'!=s[strlen(s)-1]) { printf("Too long line (>%d characters) !\n",MAXCHARS); fclose(f); return; } p=s; L=0; i=0; while (1) { k=sscanf(p,"%d%n",&v,&n); if (1==k) { if (0==L) { buf[i]=v; } else {//1==L last=v; break; } p+=n; if (';'==p[0]) L=1; i++; if (MAXN<=i) { printf("Too many numbers (>%d) !\n",MAXN); fclose(f); return; } } else if (0==k) { p++; } else {//-1==k break; } } k=0; n=i; if (n>1) { for (i=0;i<n-1;i++) { for (j=i+1;j<n;j++) { if (buf[i]+buf[j]==last) { if (0==k) { printf("%d,%d",buf[i],buf[j]); } else { printf(";%d,%d",buf[i],buf[j]); } k++; } } } if (0==k) { printf("NULL\n"); } else { printf("\n"); } } } fclose(f);}//1,4;2,3//5,15;9,11//NULL