zoukankan      html  css  js  c++  java
  • CCF201409-1 相邻数对(100分)


    试题编号: 201409-1
    试题名称: 相邻数对
    时间限制: 1.0s
    内存限制: 256.0MB
    问题描述:
    问题描述
      给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。
    输入格式
      输入的第一行包含一个整数n,表示给定整数的个数。
      第二行包含所给定的n个整数。
    输出格式
      输出一个整数,表示值正好相差1的数对的个数。
    样例输入
    6
    10 2 6 3 7 8
    样例输出
    3
    样例说明
      值正好相差1的数对包括(2, 3), (6, 7), (7, 8)。
    评测用例规模与约定
      1<=n<=1000,给定的整数为不超过10000的非负整数。

    问题链接:CCF201409试题

    问题描述:首先输入正整数n,接着输入n个正整数,对于这n个数,统计输出其中的相邻数对(差值为1的数对)。

    问题分析:看似是一个n个数与n个数进行比较(时间复杂度高)的问题,但是可以用一个标志数组来处理。因为,这n个数是正整数,最大值为10000。

    程序说明

    这里写了C语言和C++语言两个版本的程序。

    标志数组需要左右多2个元素,所以数组元素的个数为N+2。使用函数memset()对标志数组进行初始化是套路,一定要理解掌握并且熟练应用。使用布尔数组也是本程序的一个关键,可以节省空间,但是要付出时间的代价。


    提交后得100分的C语言程序如下:

    /* CCF201409-1 相邻数对 */
    
    #include <stdio.h>
    #include <string.h>
    
    #define N 10000
    int flag[N + 1];
    
    int main(void)
    {
        int n, v, sum=0;
    
        // 清除标志:flag[i]为true表示i已经出现过,flag[i]为false表示i尚未出现过
        memset(flag, 0, sizeof(flag));
    
        // 输入数据,进行判断,统计处理
        scanf("%d", &n);
        while(n--) {
            // 输入数据
            scanf("%d", &v);
            flag[v] = 1;
    
            // 进行判断和统计处理
            if(flag[v-1])
                sum++;
            if(flag[v+1])
                sum++;
        }
    
        // 输出结果
        printf("%d
    ", sum);
    
        return 0;
    }


    提交后得100分的C++语言程序如下:

    /* CCF201409-1 相邻数对 */
    
    #include <iostream>
    #include <cstring>
    
    const int N = 10000;
    
    bool flag[N+2];
    
    using namespace std;
    
    int main()
    {
        int n, v, sum=0;
    
        // 清除标志:flag[i]为true表示i已经出现过,flag[i]为false表示i尚未出现过
        memset(flag, false, sizeof(flag));
    
        // 输入数据,进行判断,统计处理
        cin >> n;
        for(int i=1; i<=n; i++) {
            // 输入数据
            cin >> v;
            flag[v] = true;
    
            // 进行判断和统计处理
            if(flag[v-1])
                sum++;
            if(flag[v+1])
                sum++;
        }
    
        // 输出结果
        cout << sum << endl;
    
        return 0;
    }



     
  • 相关阅读:
    iOS开发之Socket
    IOS开发之Bug--使用KVC的易错情况
    IOS开发之功能模块--给任意的UIView添加点击事件
    IOS开发之开发者账号遇到的bug
    iOS开发--关于TableViewCell的可视化设置细节
    学习Coding-iOS开源项目日志(四)
    Learn how to Use UIPageViewController in iOS
    关于Storyboard的使用
    学习Coding-iOS开源项目日志(三)
    学习Coding-iOS开源项目日志(二)
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564223.html
Copyright © 2011-2022 走看看