题目:

由a-z、0-9组成3位的字符密码,设计一个算法,列出并打印所有可能的密码组合(可用伪代码、C、C++、Java实现)

C代码:

#include <stdio.h>
#include <stdlib.h>int main()
{char a, b, c;for (a = '0'; a <= 'z';a++){for (b = '0'; b <= 'z';b++){for (c = '0'; c <= 'z';c++){printf("%c%c%c ", a, b, c);if (c=='9'){c = 'a' - 1;}}printf("\n");system("pause");if (b=='9'){b = 'a' - 1;}}if (a=='9'){a = 'a' - 1;}}system("pause");return 0;
}

结果:

补充:

*************************************

打印从n个数种选取m个数的组合数

*************************************

方法一:利用递归思想

代码:

#include <iostream>
using namespace std;//从后往前选取,选定位置i后,再在前i-1个里面选取m-1个。
//如 1 2 3 4 5 中选取 3 个
//1、选取5后,再在前4个里面选取2个,而前4个里面选取2个又是一个子问题,递归即可。
//2、如果不包含5,直接选定4,那么再在前3个里面选取2个,而前三个里面选取2个又是一个子问题,递归即可。
//3、如果也不包含4,直接选取3,那么再在前2个里面选取2个,刚好只有两个。
//纵向看,1、2、3刚好是一个for循环,初值为5,终值为m
//横向看,该问题为一个前i-1个中选m-1的递归。
void Combination(int arr[], int nLen, int m, int out[], int outLen)
{if (m == 0){for (int j = 0; j < outLen; j++)cout << out[j] << "\t";cout << endl;return;}for (int i = nLen; i >= m; --i)   //从后往前依次选定一个{out[m - 1] = arr[i - 1]; //选定一个后Combination(arr, i - 1, m - 1, out, outLen); // 从前i-1个里面选取m-1个进行递归}
}void PrintCombination(int arr[], int nLen, int m)
{if (m > nLen)return;int* out = new int[m];Combination(arr, nLen, m, out, m);delete[] out;
}int main()
{int arr[] = { 1, 2, 3, 4, 5, 6 };
/*  Combine(arr, sizeof(arr) / sizeof(int), 3);*/PrintCombination(arr,sizeof(arr)/sizeof(int),3);return 0;
}

结果:

方法二:二进制组合算法

思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端(只有第一位变为0才需要移动,否则其左边的1本来就在最左端,无需移动)。
当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。
例如求5中选3的组合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5

代码:

#include <iostream>
using namespace std;void Combine(int arr[], int n, int m)
{if (m > n)return;int* pTable = new int[n];     //定义标记buf并将其前m个置1memset(pTable, 0, sizeof(int)*n);for (int i = 0; i < m; ++i)pTable[i] = 1;bool bFind = false;do{for (int i = 0; i < n; i++)  //打印当前组合{if (pTable[i])cout << arr[i] << "\t";}cout << endl;bFind = false;for (int i = 0; i < n - 1; i++){if (pTable[i] == 1 && pTable[i + 1] == 0){swap(pTable[i], pTable[i + 1]);    //调换10为01bFind = true;if (pTable[0] == 0)    //如果第一位为0,则将第i位置之前的1移到最左边,如为1则第i位置之前的1就在最左边,无需移动{for (int k = 0, j = 0; k < i; k++) //O(n)复杂度使1在前0在后{if (pTable[k]){swap(pTable[k], pTable[j]);j++;}}}break;}}} while (bFind);delete[] pTable;
}int main()
{int arr[] = { 1, 2, 3, 4, 5, 6 };Combine(arr, sizeof(arr) / sizeof(int), 3);//PrintCombination(arr,sizeof(arr)/sizeof(int),3);
}

结果:

算法与程序设计——由a-z,0-9组成3位的字符密码相关推荐

  1. 计算机会考程序设计循环语句知识点,算法与程序设计会考复习知识点

    <算法与程序设计会考复习知识点>由会员分享,可在线阅读,更多相关<算法与程序设计会考复习知识点(19页珍藏版)>请在人人文库网上搜索. 1.信息技术会考复习(算法与程序设计)1 ...

  2. 江南大学考研专业课851算法与程序设计_2012年真题

    文章目录 第一题: 思路: 答案: 第二题: 思路: 答案: 第三题: 思路: 答案: 第四题: 思路: 答案: 第五题: 思路: 答案: 第六题: 思路: 答案: 第七题: 思路: 答案 第八题: ...

  3. 如何学好算法与程序设计

    如何学好算法与程序设计呢?假如你选择了C语言和对C语言,想要学好C语言,需要把握好以下几点: 1.确立离散性思维方式,摈弃连续性思维方式 在学习计算机语言时,一定要确立离散性的思维方式,这决定着你是否 ...

  4. 基于区域生长算法的图像分割python_图像分割中区域生长算法的程序设计与实现...

    论文编号:DZXX399  论文字数:12586,页数:30 摘要 本课题主要研究图像分割中区域生长算法的程序设计与实现.开发工具选用VC++6.0.通过VC++6.0开发环境中的常用向导和MFC类库 ...

  5. 设计计算机程序时 要考虑计算的过程,算法和程序设计练习题复习课程(6页)-原创力文档...

    算法和程序设计练习题 一.选择题: 1.使用计算机解题的步骤,以下描述正确的是:__ B__. A .正确理解题意→设计正确算法→寻找解题方法→编写程序→调试运行 B .正确理解题意→寻找解题方法→设 ...

  6. Problem I: 零起点学算法89——程序设计竞赛

    Problem I: 零起点学算法89--程序设计竞赛 Description 每年5月份,省里都要举行程序设计竞赛. 为了让最优秀的学生去参加比赛,我们一般需要做一个选拔工作. 现在你来帮老师完成这 ...

  7. 计算机算法与程序设计知识点,算法与程序设计知识点(答案)

    信息技术学科会考复习资料 --<算法与程序设计>考试知识点及相关例题 第一部分:算法和算法表示 一. 用计算机解决问题的一般过程 例题: 1.我们在利用计算机缩写程序解决问题的时候,首先应 ...

  8. 计算机算法对程序设计的作用,【程序设计论文】高中算法与程序设计教学意义及有效性(共3796字)...

    摘要:算法和程序设计教学会加深学生对计算机科学的认识,使他们从游戏.聊天.打字.表格处理等对计算机工具作用的认识上升到计算机科学的高度上来,对学生的编程教育起到启蒙作用.笔者通过具体教学实例探讨在课程 ...

  9. 设计计算机程序时 要考虑计算的过程,算法和程序设计练习题

    <算法和程序设计练习题>由会员分享,可在线阅读,更多相关<算法和程序设计练习题(10页珍藏版)>请在技术文库上搜索. 1.算法和程序设计练习题一.选择题:1.使用计算机解题的步 ...

最新文章

  1. 有名内部类 匿名内部类
  2. java利用opencv降维_opencv中PCA降维
  3. Git系列之git log高级命令
  4. SSH框架搭建的时候遇到的问题
  5. 想法记录---实时计算的TopN的实现
  6. Highcharts在IE8中不能一次性正常显示的一种解决办法
  7. 【文献学习】强化学习1:基于值函数的方法
  8. 两个系统整合一起怎么说_结婚后该不该把父母接过来一起生活? 看看过来人是怎么说的...
  9. TCP连接发送窗口问题思考
  10. 计算机系统结构——考题
  11. ArcGIS-云南洱海流域地形图制作及使用图层下载(shp+dem)
  12. BAT大牛分享如何在最短的时间升职为阿里Java架构师
  13. 如何学计算机作文3000到500,作文学习电脑500字(共8篇)
  14. 二、分布式系统设计策略
  15. 25个常用的防火墙规则
  16. 商界大忌,你占了几条?
  17. ThinkPHP Lang多语言本地文件包含漏洞(QVD-2022-46174)漏洞复现
  18. 浅析末端并联端接(转载)
  19. uview Checkbox 复选框每一项增加删除功能
  20. 树莓派连接yl-69土壤湿度传感器

热门文章

  1. 计算机知识忘记开机密码,电脑忘记开机密码怎么办?如何解锁?
  2. 安装WebStorm-2022.3.2
  3. 走进他人内心的七项修炼
  4. 安装nvm、node、npm、nrm、pnpm
  5. socket源码分析之accept
  6. solidity合约访问其他合约的mapping
  7. TechED2012游园录
  8. 如何去掉微软正版的产品验证提醒
  9. 基于深度学习的推荐系统:综述与新视角
  10. 古希腊神话故事:雅典娜的神像