读书人

请问一个数字配对有关问题

发布时间: 2012-03-26 15:46:55 作者: rapoo

请教一个数字配对问题
说明是这样的,数字配对问题,给你一串正整数和一个数字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 

读书人网 >C语言

热点推荐