每日刷题(八十九)
快过年了还不给个三连吗?✌ (>‿◠)✌
问题 D: 比较奇偶数个数
题目描述
第一行输入一个数,为n,第二行输入n个数,这n个数中,如果偶数比奇数多,输出NO,否则输出YES。
输入
输入有多组数据。
每组输入n,然后输入n个整数(1<=n<=1000)。
输出
如果偶数比奇数多,输出NO,否则输出YES。
样例输入
1
67
7
0 69 24 78 58 62 64
样例输出
YES
NO
C++代码:
#include<iostream>
using namespace std;
int main()
{
int n;
int even;
int odd;
int a[1000] = {
0};
while(cin >> n)
{
even = 0;
odd = 0;
for(int i = 0; i < n; i++)
{
cin >> a[i];
if(a[i] % 2 == 0)
even++;
else
odd++;
}
if(even > odd)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}
样例运行结果:
问题 A: 【递归入门】全排列
题目描述
排列与组合是常用的数学方法。
先给一个正整数 ( 1 < = n < = 10 )
例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
输入一个整数n( 1<=n<=10)
输出
输出所有全排列
每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)
样例输入
3
样例输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
思路:
这是一道关于DFS的经典题,如果对该概念及代码掌握不熟练的或者不理解的朋友,可以移步看这篇博客算法十:DFS深度优先搜索
C++代码:
#include<iostream>
using namespace std;
int n;
int a[10];
int book[10];
void dfs(int step)
{
int i;
if(step == n + 1)
{
for(i = 1; i <= n; i++)
{
cout << a[i] << " ";
}
cout << "\n";
return;
}
for(i = 1; i <= n; i++)
{
if(book[i] == 0)
{
a[step] = i;
book[i] = 1;
dfs(step + 1);
book[i] = 0;
}
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}
样例运行结果: