注册 登录
编程论坛 C++教室

循环从数由参数决定,怎么办

aiyulunhui 发布于 2016-01-06 17:46, 2048 次点击
假设我要穷举密码,有6位密码就需要6从循环,我不知道密码位数,就需要输入一个参数n来决定循环从数,这个程序改怎么编?如果n固定当然可以
7 回复
#2
yangfrancis2016-01-06 21:54
回复 楼主 aiyulunhui
#include<stdlib.h>
#include<iostream>
using namespace std;
short n;
char password[20]="";
void Percursion(char *ps,short m)
{
    if(m==n) cout<<ps<<endl;//此处对密码输出可改为自己想要的其他操作
    else
    {
        for(int i=0;i<10;i++)
        {
               char digit[2];
               itoa(i,digit,10);
               strcat(ps,digit);
               Percursion(ps,m+1);
               ps[m]='\0';
        }
    }
}
int main()
{
    cout<<"请指定一个蜜码位数";
    cin>>n;
    Percursion(password,0);
    return 0;
}
//代码已测试可行
#3
yangfrancis2016-01-06 21:56
递归应该叫“recursion”,函数名的英文我是想写这个名字,把单词记错了
#4
aiyulunhui2016-01-06 23:11
回复 3楼 yangfrancis
谢谢,思想就是预留足够长的位数,用“\0"截断,对吧
#5
aiyulunhui2016-01-06 23:27
mark,预留足够长的位数,每一位遍历时多加一个字符“\0"=0.
#6
eFun2016-01-07 07:34
楼主还需要弄清密码的组成字符类型,数字+大写字母+小写字母,穷举是一个62进制的n为循环。
#7
yangfrancis2016-01-07 12:10
回复 4楼 aiyulunhui
大致是这个思路。提醒一点,实战上看这种程序用于破获密码是不现实的。网络帐户在登录时至少也过七八秒才提示密码错误导致登录超时。如果是一个6位数密码,想要穷举的话…………不敢想像。
#8
aiyulunhui2016-01-07 12:51
再mark,多重循环可以用递归简化,具体见2楼和http://bbs.
程序代码:

recursion (n)
{
if (n==0) do something;
else
    {for (ps[n-1]=48;ps[n-1]<=57;ps[n-1]++)
          recursion(n-1);  
     }
}


[此贴子已经被作者于2016-1-7 12:59编辑过]

1