簡體   English   中英

C程序在一系列數字中找到缺失的整數

[英]C program to find missing integer in a sequence of numbers

給出一系列n-1個不同的正整數,所有這些整數都小於或等於整數'n'。 你必須找到范圍[1,2,...,n]中缺少的整數。 在不使用數組的情況下解決問題。

輸入格式:包含整數'n'的一行,其中2 <= n <= 10,000第一行后跟一系列'n-1'個不同的正整數。 請注意,序列可能沒有任何特定順序。

我通過使用數組獲得了代碼

#include<stdio.h>
int main()
{
 int i,j,n[9999],m,t;
 scanf("%d",&m);
 for(i=1;i<m;i++)
  {
   scanf("%d",&n[i]);
  }
 for(i=1;i<m;i++)
  {
   for(j=1;j<i;j++)
    {
      if(n[j]>n[j+1])
       {
         t=n[j];
         n[j]=n[j+1];
         n[j+1]=t;
        }
    }
   }
   for(i=2;i<m;i++)
    {
     if(n[i-1]!=n[i]-1)
       {
          printf("%d",n[i]-1);
          break;
       }
  }
 return(0);
 }

如何在不使用數組的情況下執行相同操作?

邏輯很簡單。 您只需找到給定n的連續數字的總和。

並且,現在添加問題中提供的所有數字,以找到給定數字的總和。

區別在於你可以說這兩個總和之間的差異是缺失的數字。

例如: - 比方說,n = 6。

所以,你只能找到從1開始的n個連續整數之和,...,6是: - 6 *(6 + 1)/ 2 = 21.從1開始的n個連續整數之和的公式是{n *( n + 1)} / 2。

並且,現在找到給定n-1個數的總和。

比如,給出的數字是1,2,4,5,6。 然后他們的總和= 1 + 2 + 4 + 5 + 6 = 18。

因此,缺失數=連續n個數的和 - 給定(n-1)個數之和= 3。

找到給定整數的總和。 從n(n + 1)/ 2中減去它。

說明:前n個整數的和為n(n + 1)/ 2。 因此,給定整數的總和+缺失整數= n(n + 1)/ 2。

假設n = 10;

然后,1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 10 *(10 + 1)/ 2 == 55

如果給定的整數是-1,2,3,4,5,6,7,8,10。

然后回答= 55 - (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 10)= 9。

為了找到1到n-1數組中缺少的數字,我們有兩個方法,一個是和公式,第二個是使用XOR方法,其中兩個方法都給出O(n)時間復雜度。

使用總和公式

1獲取數字之和

   total = n*(n+1)/2

2從總和中減去所有數字,你將得到缺失的數字。

使用XOR方法

1 XOR所有數組元素,讓XOR的結果為X1。

2 XOR從1到n的所有數字,讓XOR為X2。

X1和X2的3 XOR給出缺失的數字。

'你可以使用sum方法作為數組中總數的總和,如總數組大小= 5,元素是1,2,4,5,6然后大小= 5然后使用此方法(n(n + 1))/ 2這里n = 5所以15通過計算再次得到數組1 + 2 + 4 + 5 + 6 = 18的元素之和因此18-15 = 3簡單'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM