描述
从非负整数序列 0, 1, 2, ..., n中给出包含其中n个数的子序列,请找出未出现在该子序列中的那个数。
输入描述:输入为n+1个非负整数,用空格分开。
其中:首个数字为非负整数序列的最大值n,后面n个数字为子序列中包含的数字。
输出描述:
输出为1个数字,即未出现在子序列中的那个数。
示例1
输入:
3 3 0 1
复制输出:
2
巧解:
#include<stdio.h>
int main()
{
int num, sum = 0, x, y;
scanf("%d ", &num);
for (int i = 0; i <= num; i++)
{
sum += i;
}
for (int i = 0; i < num; i++)
{
scanf("%d", &y);
sum = sum - y;
}
printf("%d", sum);
return 0;
}
利用等差数列求和思想,特别巧妙
其中第一个for循环可改为
sum=(1+num)*num/2;
法二就是利用冒泡排序,将读取的这一组数按照从小到大排列
#include<stdio.h>
int main()
{
int num,j=0,i=0;
scanf("%d",&num);
int arr[num];
while(scanf("%d",&arr[j])!=EOF)
{
j++;
}
for(i=0;i<num;i++)
{
int j=0;
for(j=0;j<num-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(i=0;i<num;i++)
{
if(arr[i]!=i)
{
printf("%d",i);
break;
}
}
return 0;
}