请教一个数字配对问题
说明是这样的,数字配对问题,给你一串正整数和一个数字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
[解决办法]
- C/C++ code
#include <stdio.h>#include <stdlib.h>#include <string>int main(){ FILE *fp1; char buf[128]={0}; char rule[] = ","; char *token=NULL; int i,offset = 0; int last,temp; int num[128]={0}; if( (fp1=fopen("input.txt","r"))==NULL ) { printf("Nothing inside"); exit(0); } while(1) { offset=0; memset(buf,0,sizeof(buf)); memset(num,0,sizeof(num)); if(!fgets(buf,128,fp1)) break; sscanf(buf,"%*[^;];%d",&last); token = strtok(buf, rule); while (token!=NULL) { temp=atoi(token); num[offset++]=temp; token = strtok(NULL, rule); } for(i=0;i!=offset;i++) printf("%d ",num[i]); printf(" %d\n",last); } fclose(fp1); getchar(); return 0;}
[解决办法]
- 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