题目 第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。 输入描述: 输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000)。 输出描述: 如果偶数比奇数多,输出NO,否则输出YES。
示例1
输入
5
1 5 2 4 3
输出 YES
#include <iostream>
using namespace std;
int main(){
int n,m,k=0;
cin>>n;
while(cin>>m){ //避免new指针的麻烦 但也有新的问题
if(m%2==0){
k++;
n--;
}
}
k>n?cout<<"NO":cout<<"YES";
return 0;
}
总结:
1.while(cin>>n)免去new指针的麻烦 但是不能在输入数据个数不是预输入数据个数的时候报错 n–换作z=0 z++反而能在两者不等时候依然给出正确的return 但是同样没有检查二者是否相等
2.如果new 数组 一定要记得free 不然多组数据存储空间可能会不够
3.如果是多组数据输入 采用计数办法区分的话 还是一定要规定输入什么结尾代表前面是个数 然后用计数器检查每组数据 否则一组数据出现输入数据个数与预输入个数不等 所有的都乱套了 ——计算机网络 传输那部分 关于数据检验
题目描述
查找一个数组的第K小的数,注意同样大小算一样大。 如 2 1 3 4 5 2 第三小数为3。
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000),再输入k。
输出描述:
输出第k小的整数。
示例1
输入
复制
6
2 1 3 5 2 2
3
输出
复制
3
#include <iostream>
using namespace std;
int main(){
int n,k,l;
//输入数据个数
cin>>n;
int *arr=new int[n];
//输入数据
for(int i=0;i<n;i++){
cin>>arr[i];
}
//输出第几小的整数
cin>>k;
for(int i=0;i<n;i++){ //冒泡排序
for(int j=i+1;j<n;j++){
if(arr[i]>arr[j]){
l=arr[i];
arr[i]=arr[j];
arr[j]=l;
}
}
}
l=0;
for(;l<k-1;l++){ //k会挪到比所求更远一个 l在k-1的位置上 l 是所求
if(arr[l]==arr[l+1])
k++;
}
cout<<arr[l]<<endl;
return 0;
}