ASCII码参照表
ASCII
ASCII(American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准 ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符
Question.1 不同字符
给定一个长度为|S|的字符串S,S中仅包含大小写字母和数字,请计算出S中有多少种不同的字符
#include <stdio.h>
#include <string.h>
int main()
{
int count = 0;
int arr_c[123] = {};
char arr[1000000];
gets(arr);
int arr_s=strlen(arr);
for(int i = 0;i<arr_s;i++)
{
int t =(int)(arr[i]);
arr_c[t] = -1;
}
for(int j = 48;j<123;j++)
{
if(arr_c[j]==-1) count++;
}
printf("%d",count);
}
//AZ 65 -90
//az 97 -122
//09 48 -57
Question.2 解密题
#include <stdio.h>
#include <string.h>
int main()
{
int k1 = 0,k2 = 0;
scanf("%d %d",&k1,&k2);
getchar();
char a[1024] = {};
gets(a);
int arr_s = strlen(a);
for(int i = 0;i<arr_s;i++)
{
if(a[i]>='A' && a[i]<='Z')
{
a[i] = a[i] - 'A';
for(int x=0;x<26;x++)
{
if(a[i] == (k1*x+k2)%26)
a[i] = x + 'A';
}
}
if(a[i]>='a' && a[i]<='z')
{
a[i] = a[i] - 'a';
for(int x=0;x<26;x++)
{
if(a[i] == (k1*x +k2 )% 26)
a[i] = x + 'a';
}
}
}
puts(a);
}
解析思考
两道题中皆通过ASCII码,实现了对数字、字符的表达。每个char字符都可以通过加减运算找到其在各种环境下对应的位置。在字符题中,通过识别ASCII码对应的十进制数字位置,并对数组标记,实现了统计字母和数字两类符号是否出现过,同理,如果有其他符号,也可以实现。在解谜题中,通过加减运算,还原字母所对应的数字,再通过计算后还原完成解题。