zoukankan      html  css  js  c++  java
  • 杭电OJ BestCoder28期1001Missing number问题(小技巧偏移法)

    1.先描述一下问题:

    小yb有一个排列,但他不小心弄丢了其中的两个数字。现在他告诉你他现在手上还有哪些数字,需要你告诉他他丢了哪两个数字。
    输入描述
    有多组数据,第一行为数据组数T(T10)。
    对于每组数据,第一行为一个正整数n,表示yb现在手上有的数字个数。
    在接下来一行有n个整数,保证所有数字互不相同且合法。
    1n1,000
    输出描述
    对于每组数据,输出两个数字,为排列缺少的两个数字,小的在前。

    2.解题思路

    该问题可以用一个数组存储输入排列,然后用一个偏移指针处理每次输入数据移动的情况。(为了处理出现 1 3 这种序列的情况,需要在输入数据的末尾加入一个0
    具体的移动情况如下图所示:


    3.代码如下

      #include <stdio.h>
      #include <stdlib.h>

      #define MAX_NUM 1000 + 10

      int main()
      {
        int i,j,num_case,num_number,number[MAX_NUM];

        int offset = 0,count = 0; //偏移

        scanf("%d",&num_case);

        for( i = 1; i <= num_case; i++)
        {
          offset = 0;
          count = 0;
          scanf("%d",&num_number);
          for( j = 0; j < num_number; j++)
          {
            scanf("%d",&number[j]);
          }

          number[j] = 0; //处理当出现 1 3 这种排列的状况而使offset偏移溢出

          for( j = 0; j < num_number + 2; j++)
          {
            if(count >= 2)
            {
              break;
            }
            if( number[offset] == j + 1 )
            {
              offset++;
            }
            else
            {
              printf("%d ",j + 1);
              count++;
            }
          }
          printf(" ");
        }
      }

     
    我是一块砖,哪里需要往哪搬。
  • 相关阅读:
    326. Power of Three
    python实现Excel删除特定行、拷贝指定行操作
    283. Move Zeroes
    268. Missing Number
    263. Ugly Number
    258. Add Digits
    257. Binary Tree Paths
    二叉树的创建,递归前序、中序、后序遍历以及队列实现层遍历
    242. Valid Anagram
    237. Delete Node in a Linked List
  • 原文地址:https://www.cnblogs.com/daimadebanyungong/p/4268228.html
Copyright © 2011-2022 走看看