首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

2个小疑点

2012-03-16 
2个小问题Function是从输入中的数字找两个数字的和等于最后一个数字(Function已解决,现在解决两个输出问题

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 

热点排行