映射成 A1------A20
B1------B20
。。。
Z1------Z20
这种形式
数字从0开始编号:
则: 0----19 对应 A1-----A20
20---39 对应 B1-----B20
#define CHAR_NUM 20
int nIndex=300;
// 确保 i 处在 0-----CHAR_NUM*26-1 之间
int i=nIndex%(CHAR_NUM*26);
//数字所对应的字母位 表示 该数字所对应的字母之前有nCharPosition个字母, 而该位置的字母为: 0x41+nCharPosition
int nCharPosition= i/CHAR_NUM;
//数字所对应的数字位 范围【1,CHAR_NUM】
int nNum=i%CHAR_NUM+1;
#define CHAR_NUM 20
int nIndex=300;
// 确保 i 处在 0-----CHAR_NUM*26-1 之间
int i=nIndex%(CHAR_NUM*26);
//数字所对应的字母位 表示 该数字所对应的字母之前有nCharPosition个字母, 而该位置的字母为: 0x41+nCharPosition
int nCharPosition= i/CHAR_NUM;
char p=0x41+nCharPosition;
//数字所对应的数字位 范围【1,CHAR_NUM】
int nNum=i%CHAR_NUM+1;
数字从1开始编号 :
则: 1----20 对应 A1-----A20
21---40 对应 B1-----B20
上述程序是从0开始编码的, 而此时的数字是从1开始编码,如何修改程序?
因为 1----20 对应 A1-----A20
21---40 对应 B1-----B20
的规律不好找, 因此我们要想个方法,即利用上个规律,又能从1开始编码。
方法:
1) 先将数字进行对应
1---20 对应为0---19
2) 然后应用上个程序 将0-19 对应为A1-A20 即是将 原序号的 1-20--对应为A1-A20
#define CHAR_NUM 20
//从1 开始编号
int nIndex=300;
//nIndex 从0开始编号时,所对应的数值
int nCorrespondingIndex=nIndex-1;
/// 映射规则相同 ///
// 确保 i 处在 0-----CHAR_NUM*26-1 之间
int i=nCorrespondingIndex%(CHAR_NUM*26);
//数字所对应的字母位 表示 该数字所对应的字母之前有nCharPosition个字母, 而该位置的字母为: 0x41+nCharPosition
int nCharPosition= i/CHAR_NUM;
char p=0x41+nCharPosition;
//数字所对应的数字位 范围【1,CHAR_NUM】
int nNum=i%CHAR_NUM+1;
总结:
数字从1开始编号,对其进行映射时,规则不好找
这时改怎么办?
转换下思路,我们先不找规律, 而是先将数字处理下, 将其等价映射为另一个序列。
如果,这个序列的规律很好找,则我们直接使用这个序列的规律即可。
这种,间接解决问题的策略是一种什么思想呢?
我想,应该是处理之前的转换思想,对数据预处理, 将难处理的问题 等价转换为相对容易处理的问题