输入一串数字找出其中缺少的最小的两个数

Description

There is a permutation without two numbers in it, and now you know what numbers the permutation has. Please find the two numbers it lose.

Input

There is a number Tshows there are T test cases below. (T<=10) 
For each test case , the first line contains a integers n, which means the number of numbers the permutation has. In following a
line , there are n distinct postive
integers.(1<=n<=1000)

Output

For each case
output two numbers , small number first.

Sample Input

2

3

3 4 5

1

1

Sample Output

1 2

2 3

解题思路:建立一个数组最初将其全部清零(注意每次循环的时候的时候都要清零)。然后将输入的存在于这个排列中的数,作为这个数组的一个下标,同时将数组中的数++(即使它的值不再是零);最后遍历这个数组中的所有元素找出两个最先等于零的数的下标。这两个下标就是我们要找的这个排列中缺少的最小的两个数。同时注意输出时两个数的中间有一个空格。这是就要在输出第一个数时输出一个空格,而在输出第二个数时不要输出空格。

程序代码:

#include <iostream>

#include <string.h>

using namespace std;

const int maxn=10005;

int a[maxn];

int main()

{

int T;

cin>>T;

while(T--)

{

memset(a,0,sizeof(a));//将数组清零

int n,t;

cin>>n;

for(int i=0;i<n;i++)

{

cin>>t;

a[t]++;// 将输入的数作为这个数组的一个下标,同时将数组中的数

//++,使其不再为零即可

}

int c=0;

for(int k=1;c<2;k++)

{

if(a[k]==0)//判断数组中的数是否为零

{

c++;

cout<<k;

if(c==1)//控制空格的输出

cout<<"
";

}

}

cout<<endl;

}

return 0;

}

 
时间: 2024-10-12 17:07:42

输入一串数字找出其中缺少的最小的两个数的相关文章

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数

题目描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.   你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用.示例:给定 nums = [2, 7, 11, 15], target = 9返回 [0, 1] 思路: 第一层for循环从索引0到倒数第二个索引拿到每个数组元素,第二个for循环遍历上一层for循环拿到的元素的后面的所有元素. 具体代码: 1 public class Solution { 2 public int[] twoSum(int[] nums,

在数组中找出只出现一次的两个数

来来来,看一道面试题!!! 题目是这样叙述的: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字. 要求:时间复杂度为O(N),空间复杂度为O(1). 这该怎么解决呢??? 请看我的分析: 将这道题简单化: 一个数组中只有一个数字出现一次,其他数字都是成对出现的,这时我们可以根据异或运算符的特性:A^B^A = B; 0 ^ A = A:我们可以将这个数组的全部元素依次做异或运算,最终结果就是那个只出现一次的数字. 如果这个数组中出现两个不同的数字,而其他数字均

从列表中找出和为某个常数的两个数

class Solution(object): def twoSum(self, nums, target): dic = {} for i, num in enumerate(nums): if num in dic: return [dic[num], i] else: dic[target - num] = i x=Solution() l=[1,3,5,6] print(x.twoSum(l,9)) 输出 [1, 3] 原文地址:https://www.cnblogs.com/sea-s

二分法检索(控制台输入一组数,找出关键字和最大值)

算法:二分法查找适用于数据量较大时,但是数据需要先排好顺序.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间位置K (2)将查找的值T与array[k]比较.若相等,查找成功返回此位置:否则确定新的查找区域,继续二分查找.区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,--,high]>T;故新的区间为array[low,--,K-1]b.array[k]<T 类似上面查找区间为array[k+1,--,high

C 输入一串数字,去掉其中含7的和能被7整除的数

C 输入一串数字,去掉其中含7的和能被7整除的数,每个数小于10000,数字个数小于100 输入例子:1,7,56,77,87,2,45,42,97,9977 输出:1,2,45 注意:输入个数不确定,所以不能够用整形数组处理,不能以判断整形数组元素是否等于\n为结束,因为数组是整形的,\n是字符型的,是输入不进去的 所以要用字符串来处理,先把用逗号相隔的所有整数取出来,然后再对这些数进行判断输出 #include<stdio.h> #include<string.h> void

C 输入一串数字,去掉当中含7的和能被7整除的数

C 输入一串数字,去掉当中含7的和能被7整除的数,每一个数小于10000,数字个数小于100 输入样例:1,7,56,77,87,2,45,42,97,9977 输出:1,2,45 注意:输入个数不确定.所以不可以用整形数组处理.不能以推断整形数组元素是否等于\n为结束,由于数组是整形的.\n是字符型的,是输入不进去的 所以要用字符串来处理,先把用逗号相隔的全部整数取出来,然后再对这些数进行推断输出 #include<stdio.h> #include<string.h> void

java 从键盘输入学生成绩,找出最高分,并输出学生成绩等级。

/*从键盘输入学生成绩,找出最高分,并输出学生成绩等级:成绩 >=最高分-10 等级为A成绩 >=最高分-20 等级为B成绩 >=最高分-30 等级为C其余为 等级为D 提示:先输入学生人数,根据人数创建int数组,存放学生成绩:*/ package study01; import java.util.Scanner; public class Score { public static void main(String[] args) { Scanner sc = new Scanne

java-第七章-数组-一组数字找出最低分,并找出他的下标

public static void main(String[] args) { // TODO Auto-generated method stub int integarl [] = new int []{18,25,7,36,13,2,89,63}; int min=integarl[0],index=0; for (int i = 0; i < integarl.length; i++) { if(integarl[i]<min){ min=integarl[i]; index=i+1

输入一组数,找出满足某条件的数

1.输入一组数,找出它的最大值,最小值,平均值. 关键点是要把第一个数赋值给min,max,sum 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int min,max,sum,i; 6 cin>>i; 7 min = max =sum = i; // 将输入的第一个数赋值,以便后续比较 8 int n = 0; // 统计输入了多少个数 9 while(cin>>i){ 10 n++; 1