栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【听说有人想转码】初探排列组合(数组)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【听说有人想转码】初探排列组合(数组)

我觉得自己的方法不咋地,只能适用于较简单的排列组合。

直接上题目和代码,之后有时间再改。

题目

自己的银行卡设置一个6位数字的密码,应符合如下规则:
(1)左侧数第1,3,5位数字为奇数;
(2)左侧数第2,4,6位数字为偶数;
(3)任意两位数字不相同;
(4)中间两位不是月份(不在1-12之间),后两位不是日期(不在1-31之间);
(5)前三位非升序非降序排列,后三位非升序非降序排列;
(6) 前三位与后三位之差被23整除余13。
请编程输入两个六位整数a,b, 输出区间[a,b]之间所有符合条件的密码。

输入样例:
100000 999999

结尾无空行

输出样例:
307294
385096
387052
523096
529470
549076
563274
581476
583294
587436
705692
725436
769250
781492
785496
785634
901658
903476
923450
927638
947658

 

这题出得引人犯罪,把所有可能值都给出来,诱惑我打表(就是自己算出结果,然后简单写个输出程序,而不是让计算机去算出结果,一言以蔽之,聪明的流氓)。

我写的代码(仅供参考)

#include 
using namespace std;

int main()
{
	long x[6],y[40],a, b, c, d, e, f,flag;
	int n = 0;
	for (a = 1; a < 10; a += 2)
	{
		for (b = 0; b < 9; b += 2)
		{
			for (c = 1; c < 10; c += 2)
			{
				for (d = 0; d < 9; d += 2)
				{
					for (e = 3; e < 10; e += 2)
							
						for (f = 0; f < 9; f += 2)
						{
							flag = 0;
							if (a != c && c != e && e != a)flag++; else continue;
							if (b != d && d != f && f != b)flag++; else continue;
							if (10 * c + d > 12)flag++; else continue;
							if (e * 10 + f > 31)flag++; else continue;
							if(((b>a&&b>c)||(bf)&&(e>d))||((e> n1 >> n2;
	int i = 0;
    for(i=0;i<22;i++)
    {
        if (y[i] >= n1 && y[i] <= n2) { cout<< y[i]; i++; break ;}
    }
    while (y[i] >=n1 && y[i] <= n2) { cout < 

为什么最后几行输出整的那么花里胡哨呢,因为他不让最后一行输出换行。

(未完待续......)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号