ACM 입 출력 기술 총화

9020 단어 C++ACM
입력:
첫 번 째 클래스: 입력 은 몇 개의 Input Block 이 있 는 지 설명 하지 않 고 EOF 를 끝 표지 로 합 니 다.
예: HDOJ1089(http://acm.hdu.edu.cn/showproblem.php?pid=1089)
C:
#include<cstdio>
int main()
{
    int a, b;
    while(scanf("%d%d",&a, &b) != EOF)
    {
        printf("%d
",a + b); } }

설명: int scanf (const char * format,...);  입력 데이터 개수 되 돌리 기
, 없 으 면 EOF (- 1) 로 돌아간다.
C++:
#include<iostream>
using namespace std;
int main()
{
    long a,b;
    while(cin >> a >> b)
    {
        cout << a + b << endl;
    }
    return 0;
}

두 번 째 유형: 입력 을 시작 하면 N 개의 Input Block 이 있 고 다음은 N 개의 Input Block 이 있 습 니 다. 
예: HDOJ1090 (http://acm.hdu.edu.cn/showproblem.php?pid=1090)
C:
#include<cstdio>
int main()
{
    int a,b,n,i;
    scanf("%d",&n);
    for(i = 0; i < n; i++)
    {
        scanf("%d%d",&a,&b);
        printf("%d
",a + b); } return 0; }

C++:
#include<iostream>
using namespace std;
int main()
{
    long a,b,n;
    cin >> n;
    while(n--)
    {
        cin >> a >> b;
        cout << a + b << endl;
    }
    return 0;
}

세 번 째 유형: 입력 은 몇 개의 Input Block 이 있 는 지 설명 하지 않 지만 특정한 특수 입력 을 끝 표지 로 합 니 다.
예: HDOJ1091(http://acm.hdu.edu.cn/showproblem.php?pid=1091)
C:
#include<cstdio>
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b))
    {
        if(0 == a && 0 == b)
            break;
        printf("%d
",a + b); } return 0; }

메모: while (scanf ("% d% d", & a, & b) & & (a! = 0 & b! = 0)  & & 연산 자 는 단락 연산 이기 때문에 입력 한 것 은?
0 5, 입력 정확, a! =0 은 가짜 입 니 다. 전체 논리 표현 식 의 값 은 가짜 입 니 다. 종료 프로그램 에서 뛰 어 내 려 제목 입력 규칙 과 모 순 됩 니 다!C++:
#include<iostream>
using namespace std;
int main()
{
    int a, b;
    while(cin >> a >> b)
    {
        if(0 == a && 0 == b)
            break;
        cout << a + b << endl;
    }
    return 0;
}

네 번 째 유형: 상기 세 가지 조합.
예:
HDOJ_1092(http://acm.hdu.edu.cn/showproblem.php?pid=1092)
C:
#include<cstdio>
int main()
{
    int tmp,sum,n,i;
    while(scanf("%d",&n))
    {
        if(0 == n)
            break;
        sum = 0;
        for(i = 0; i < n; i++)
        {
            scanf("%d",&tmp);
            sum += tmp;
        }
        printf("%d
",sum); } return 0; }

C++:
#include<iostream>
using namespace std;
int main()
{
    int tmp,sum,n,i;
    while(cin >> n)
    {
        if(0 == n)
            break;
        sum = 0;
        for(i = 0; i < n; i++)
        {
            cin >> tmp;
            sum += tmp;
        }
        cout << sum << endl;
    }
    return 0;
}

HDOJ_1093(http://acm.hdu.edu.cn/showproblem.php?pid=1093)
C:
#include<cstdio>
int main()
{
    int n,k,tmp,sum;
    scanf("%d",&n);
    while(n--)
    {
        sum = 0;
        scanf("%d",&k);
        while(k--)
        {
            scanf("%d",&tmp);
            sum += tmp;
        }
        printf("%d
",sum); } return 0; }

C++:
#include<iostream>
using namespace std;
int main()
{
    int n,k,tmp,sum,i,j;
    cin >> n;
    for(i = 0; i < n; i++)
    {
        sum = 0;
        cin >> k;
        for(j = 0; j < k; j++)
        {
            cin >> tmp;
            sum += tmp;
        }
        cout << sum << endl;
    }
    return 0;
}

HDOJ_1094(http://acm.hdu.edu.cn/showproblem.php?pid=1094)
C:
#include<cstdio>
int main()
{
    int n,tmp,sum;
    while(scanf("%d",&n) == 1)
    {
        sum = 0;
        while(n--)
        {
            scanf("%d",&tmp);
            sum += tmp;
        }
        printf("%d
",sum); } return 0; }

C++:
#include<iostream>
using namespace std;
int main()
{
    int n,tmp,sum,i;
    while(cin >> n)
    {
        sum = 0;
        for(i = 0; i < n; i++)
        {
            cin >> tmp;
            sum += tmp;
        }
        cout << sum << endl;
    }
    return 0;
}

다섯 번 째 클래스: 전체 문자열 을 입력 하 였 습 니 다.
예: HDOJ1048(http://acm.hdu.edu.cn/showproblem.php?pid=1048)
C:
#include<cstdio>
#include<cstring>
#include<cctype>
#define MAX 1000 + 10
char buf[MAX],fs[15] = "START",fe[15] = "END",fend[15] = "ENDOFINPUT";
int main()
{

    int i;
    //while(fgets(buf,sizeof(buf),stdin))
    while(gets(buf))
    {
        if( strcmp(buf,fs) == 0 || strcmp(buf,fe) == 0 )
           continue;
        if(strcmp(buf,fend) == 0)
            break;
        i = 0;
        while(buf[i] != '\0')
        {
            if(isalpha(buf[i]))
                printf("%c",(buf[i] - 'A' + 21) % 26 + 'A');
            else
                printf("%c",buf[i]);
            i++;
        }
        printf("
"); //printf("%s
",buf); } }

메모: gets (s) 는 버퍼 에 구멍 이 생 길 수 있 습 니 다. 일반적으로 ACM 이나 온라인 OJ 는 이 구멍 이 생기 지 않도록 합 니 다. RE 가 나타 나 면 버퍼 에 구멍 이 넘 칠 수 있 습 니 다. fgets (buf, MAXN, fin) 를 사용 할 수 있 습 니 다. 이 방법 은 환 행 리 턴 과 함께 읽 을 수 있 습 니 다. 파일 이 끝 날 때 리 턴 되 지 않 으 면 리 턴 되 지 않 습 니 다.C++:
4. 567913. 주의: char [255] 로 유지 하면 cin. getline (char, 255) 을 사용 하여 저장 할 수 있 습 니 다. 위 는 string 을 사용 하여 저장 합 니 다.
일반적으로 한 줄 을 읽 는 것 은 상기 방법 을 사용 할 수 있 으 며, 문자열 을 읽 으 면 scanf ("% s", str) 를 사용 할 수 있 습 니 다.또는 cin < str;독 자 는 제목 에 따라 자체 적 으로 분석 할 수 있 으 며, C 언어 중의 getc (char) 나 scanf ('% c', chr) 를 사용 하면 빈 칸 을 읽 고 차 로 돌아 갈 수 있 으 니, 이곳 은 주의해 야 한다.
연습:
HDOJ_1013(http://acm.hdu.edu.cn/showproblem.php?pid=1013)
HDOJ_1018(http://acm.hdu.edu.cn/showproblem.php?pid=1018)
출력:
첫 번 째 클래스: 하나의 Input Block 에 대응 하 는 Output Block, Output Block 사이 에 빈 줄 이 없습니다.
예: HDOJ1089 (코드 및 출력 은 위 에 입력 한 첫 번 째 예 를 보십시오)
 문법:
C:  printf("%d",ans);
C++:cout << ans << endl;
두 번 째 클래스: 하나의 Input Block 은 하나의 Output Block 에 대응 하고 모든 Output Block 이후 빈 줄 이 있 습 니 다.
예: HDOJ1095(http://acm.hdu.edu.cn/showproblem.php?pid=1095)
C:
#include<iostream>
#include<cctype>
#include<string>
#define MAX 1000 + 10
using namespace std;
string buf;
int main()
{

    int i;
    string fs,fe,fend;
    fs = "START";
    fe = "END";
    fend = "ENDOFINPUT";
    while(getline(cin,buf))
    {
        if(buf == fs || buf == fe)
        {
            //getline(cin,buf);
            continue;
        }
        if(buf == fend)
            break;
        for(i = 0; i < buf.length(); i++)
        {
            if(isalpha(buf[i]))
                buf[i] = (buf[i] - 'A' + 21) % 26 + 'A';
        }
        cout << buf << endl;
        //getline(cin,buf);
    }
    return 0;
}

C++:
#include<cstdio>
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b) == 2)
    {
        printf("%d

",a + b); } return 0; }

세 번 째 클래스: 하나의 Input Block 은 하나의 Output Block 에 대응 하고 Output Block 사이 에 빈 줄 이 있 습 니 다.
예: HDOJ1096(http://acm.hdu.edu.cn/showproblem.php?pid=1096) C:
#include<iostream>
using namespace std;
int main()
{
    int a,b;
    while(cin >> a >> b)
    {
        cout << a + b << endl << endl;
    }
    return 0;
}

C++:
#include<cstdio>
int main()
{
    int n,i,j,k,sum,tmp;
    scanf("%d",&n);
    for(i = 1; i <= n; i++)
    {
        scanf("%d",&k);
        sum = 0;
        for(j = 0; j < k; j++)
        {
            scanf("%d",&tmp);
            sum += tmp;
        }
        printf("%d
",sum); if(i != n) printf("
"); } return 0; }

연습:
HDOJ_1016:http://acm.hdu.edu.cn/showproblem.php?pid=1016
HDOJ_1017:http://acm.hdu.edu.cn/showproblem.php?pid=1017
배 울 여력 이 있 는 독 자 는 문 제 를 시험 해 볼 수 있다.
HDOJ:
1016-1018、1013、1061、1170、2000-2043
본 논문 의 코드 테스트 는 모두 codeblocks 에서 테스트 에 성 공 했 고 HDOJ 에서 AC 를 할 수 있 습 니 다.
전재 가 있 으 면 전재 주 소 를 밝 혀 주 십시오.
전송 주소:http://blog.csdn.net/wyrhero/article/details/8944542

좋은 웹페이지 즐겨찾기