简单密码破解
他是这么变换的,大家都知道手机上的字母: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,
声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。
示例
输入
YUANzhi1987
输出
zvbo9441987
// Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
//输入不为空
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
//获取第i个字符
char c = str.charAt(i);
//判断,处理
if (c >= 'A' && c < 'Z') {
c = (char) (c + 'b' - 'A');
} else if (c == 'Z') {
c = 'a';
} else if (c>='a' && c<='c') {
c = '2';
} else if (c>='d' && c<='f') {
c = '3';
} else if (c>='g' && c<='i') {
c = '4';
} else if (c>='j' && c<='l') {
c = '5';
} else if (c>='m' && c<='o') {
c = '6';
} else if (c>='p' && c<='s') {
c = '7';
} else if (c>='t' && c<='v') {
c = '8';
} else if (c>='w' && c<='z') {
c = '9';
}
sb.append(c);
}
System.out.println(sb.toString().trim());
}
}
#include<iostream>
#include<string>
using namespace std;
const string dict1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
const string dict2="bcdefghijklmnopqrstuvwxyza22233344455566677778889999";
char Char_Change(char a){
for(int i=0;i<dict1.size();i++)
if(dict1[i]==a) return dict2[i];
return a;
}
int main(){
//string data="YUANzhi1987";
string data;
while(getline(cin,data)){
for(int i=0;i<data.size();i++)
data[i] = Char_Change(data[i]);
cout<<data<<endl;
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char str[100],b[100];
gets(str);
int i;
while(str)
{
int len=strlen(str);
for (i=0;i<len;i++)
{
if('a'<=str[i]&&str[i]<='c')
str[i]='2';
else if('d'<=str[i]&&str[i]<='f')
str[i]='3';
else if('g'<=str[i]&&str[i]<='i')
str[i]='4';
else if('j'<=str[i]&&str[i]<='l')
str[i]='5';
else if('m'<=str[i]&&str[i]<='o')
str[i]='6';
else if('p'<=str[i]&&str[i]<='s')
str[i]='7';
else if('t'<=str[i]&&str[i]<='v')
str[i]='8';
else if('w'<=str[i]&&str[i]<='z')
str[i]='9';
else if('A'<=str[i]&&str[i]<'Z')
str[i]=str[i]+32+1;
else if(str[i]=='Z')
str[i]='a';
else
str[i]=str[i];
}
printf("%s\n",str);
//printf("\0");
return 0;
}
}
字符串排序
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
// Java
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = br.readLine()) != null) {
char[] arr = str.toCharArray();
StringBuilder builder = new StringBuilder();
// 英文字母从 A 到 Z 排列,不区分大小写:26 个
for (int i = 0; i < 26; i++) {
char c = (char) ('A' + i);
// 遍历字符串
for (int j = 0, length = str.length(); j < length; j++) {
// 不区分大小写
if (c == arr[j] || c == arr[j] - 'a' + 'A') {
builder.append(arr[j]);
}
}
}
// 非英文字母的其它字符保持原来的位置
for (int i = 0, length = str.length(); i < length; i++) {
if (!((arr[i] >= 'A' && arr[i] <= 'Z') || (arr[i] >= 'a' && arr[i] <= 'z'))) {
builder.insert(i, arr[i]);
}
}
System.out.println(builder.toString());
}
}
}
#include<vector>
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
vector<char> tempChar;
while(getline(cin,s))
{
tempChar.clear();
int len = s.size();
for(int j=0; j<26; j++)
{
for(int i=0; i<len; i++)
{
if(s[i]-'a'==j||s[i]-'A'==j) // 将所有的字母压入栈中
{
tempChar.push_back(s[i]);
}
}
}
for(int i=0,k=0;(i<len)&&k<tempChar.size();i++)
{
if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
s[i]=tempChar[k++];
}
cout<<s<<endl;
}
return 0;
}
图片整理
Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过C语言解决。
// Java
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = "";
while((s=br.readLine())!=null){
char[] result = s.toCharArray();
Arrays.sort(result);
System.out.println(String.valueOf(result));
}
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[1000];
while(scanf("%s",str)!=EOF)
{
int a[256]={0},i,len,j;
len=strlen(str);
for(i=0;i<len;i++)
{
a[str[i]]++;
}
for(j=0;j<256;j++)
{
while(a[j]!=0)
{
printf("%c",j);
a[j]--;
}
}
printf("\n");
}
return 0;
}
蛇形矩阵
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
// Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = null;
StringBuilder sb = new StringBuilder();
while ((str = br.readLine()) != null) {
int num = Integer.parseInt(str), count = 0, first = 1;
for (int i = 0; i < num; i++) {
first += i;
count = first;
sb.append(count).append(' ');
for (int j = i + 2; j <= num; j++) {
count += j;
sb.append(count).append(' ');
}
sb.append("\n");
}
System.out.print(sb);
sb.delete(0, sb.length());
}
}
}
``````javascript
#include<iostream>
using namespace std;
int main(int argc, char** argv)
{
int n;
while (cin >> n)
{
int beg = 1;
for (int i = 1; i <= n; ++i)
{
cout << beg;
int temp = beg;
for (int j = i + 1; j <= n; ++j)
{
temp += j;
cout << ' '<<temp;
}
beg += i;
cout << endl;
}
}
}
字符串加密
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,其余几个丢弃。现在,修改过的那个单词属于字母表的下面,如下所示:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙,Attack AT DAWN(黎明时攻击)就会被加密为Tpptad TP ITVH。
请实现下述接口,通过指定的密匙和明文得到密文。
// Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String key;
while ((key = br.readLine()) != null) {
char[] chars = key.toLowerCase().toCharArray();
char[] dict = new char[26];
int index = 0;
tag1:
for (char ch : chars) {
for (int i = 0; i < index; i++) {
if (ch == dict[i]) {
continue tag1;
}
}
dict[index] = ch;
index++;
}
char ch = 'a';
tag2:
for (int i = 0; i < 26; i++) {
for (int j = 0; j < index; j++) {
if (dict[j] == ch) {
ch++;
continue tag2;
}
}
dict[index] = ch;
ch++;
index++;
}
String str = br.readLine();
char[] res = str.toCharArray();
for (int i = 0; i < res.length; i++) {
if(res[i] - 'a'>=0){
res[i] = dict[res[i] - 'a'];
}else{
res[i] = dict[res[i] - 'A'];
}
}
System.out.println(String.valueOf(res));
}
}
}
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main(void){
string key,data;
while(cin >> key >> data){
//输入密钥和明文输出密文
//首先根据秘钥进行映射的生成
vector<bool> charecter(26,false); //看看我们这26个字母都用啥了
vector<char> transfer;
for(int i = 0;i < key.length();i++)
if(key[i] >= 'a' && key[i] <= 'z')
if(!charecter[key[i]-'a']){ //这单词首次出现
transfer.push_back(key[i]-'a'+'A'); //映射表只放大写的
charecter[key[i]-'a'] = true;
}
else if(key[i] >= 'A' && key[i] <= 'Z')
if(!charecter[key[i]-'A']){//这单词首次出现
transfer.push_back(key[i]);
charecter[key[i]-'A'] = true;
}
for(int i = 0;i < 26;i++) //剩下的得补齐啊
if(!charecter[i])
transfer.push_back(i+'A');
//映射表做好了
string res;
for(int i = 0;i < data.length();i++){
if(data[i]>= 'a' && data[i] <= 'z')
res += transfer[data[i]-'a']+'a'-'A';
else if(data[i]>= 'A' && data[i] <= 'Z')
res += transfer[data[i]-'A'];
}
cout << res << endl;
}
return 0;
}
```