对于c++暴力破解!学习日记

代码只写关键部分,请见谅。
在代码中,黑客破解个人信息手段的方法有很多,暴力破解是众多普通黑客的选择。暴力破解分为两种,第一是无序暴力破解,也就是在所有可能中一个一个试。
这是代码:
int ac;
cin>>ac;\ac为真正密码。这里假设密码为三位数。
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
for(int k=1;k<=9;k++){
cout<<i<<j<<k;\输出每一个结果
if(i100+j10+k==ac){
cout<<“正确的密码是”<<i<<j<<k;
}
}
}
}
这种虽然很简单,但是适用范围很小,普遍的密码都有次数限制,例如10次后等待3分钟。这时需要有序暴力破解;例如k<j<i的密码,这时可以改进代码:
int ac;
cin>>ac;\ac为真正密码。这里假设密码为三位数。
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
for(int k=1;k<=j;k++){
cout<<i<<j<<k;\输出每一个结果
if(i100+j10+k==ac){
cout<<“正确的密码是”<<i<<j<<k;
}
}
}
}
可以看见,优化后的代码避免了不可能的密码,时间更快。
下面是一个实例:

3. 平方十位数

XJOI - 题目ID:8003
最新提交:Accepted 100 分
历史最高:Accepted100 分

时间限制: 200ms
空间限制: 32000kB

题目描述

时间:0.2 空间:32M
题目描述:
请找出最大的满足以下条件的十位数:
这个十位数由0~9组成,且0~9各出现一次。
这个十位数是一个完全平方数。
输入格式:
输出格式:
一个十位数表示答案。
样例输入1:

样例输出1:

约定:
提示:
注意本题时间限制。

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){

  • for(long long a=99381;a>=31991;a–){*
  • long long num=aa;
  • int vis[10]={};*
  • int sum=0;*
  • while(num){*
  •  vis[num%10]++;*
    
  •  sum+=vis[num%10];*
    
  •  num/=10;*
    
  • }*
  • for(int j=0;j<10;j++){*
  •  if(sum==10){*
    
  •    cout<<a*a;*
    
  •    return 0;*
    
  •  }*
    
  • }*
  • }*
    }
    这个是进阶难度。

总结
要在合适的时候选择合适的暴力破解方法,希望能帮到大家。

3 个赞