问题 D: 比较奇偶数个数、全排列

每日刷题(八十九)

快过年了还不给个三连吗?✌ (>‿◠)✌

问题 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;
} 

样例运行结果:
在这里插入图片描述

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

猜你喜欢

转载自blog.csdn.net/qq_44631615/article/details/112390992