鱼C论坛

 找回密码
 立即注册
查看: 1280|回复: 9

作业,大佬救救

[复制链接]
发表于 2023-5-19 23:50:43 | 显示全部楼层 |阅读模式
1鱼币
编写函数将整数k变换为一个字母串,规则如下:设0对应A,1对应B,......,25对应Z。从左向右考察k的各位数字,若连续两位对应上面一种变换,则直接换掉两位数字,否则一位数字换成对应的字母。变换结果存入res反馈给调用者。函数原型为:
void DigiTran( int k, char res[] );
在主函数输入一些非负整数,最后输入-1代表结束,利用上面函数对每个数字变换后输出。

示例输入:(数字间空一格)
12 3925 0 -1
示例输出:(每个字符串后面空一格)
M DJZ A

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-19 23:52:54 | 显示全部楼层
才一个币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-19 23:53:31 | 显示全部楼层
以下是代码实现及注释说明:
#include <iostream>#include <cstring>using namespace std;// 将数字转换为对应字母char numToChar(int num) {    return 'A' + num;}void DigiTran(int k, char res[]) {    int len = 0;    // 将数字转换为字符串    char str[10];    sprintf(str, "%d", k);    int strLen = strlen(str);    for (int i = 0; i < strLen; i++) {        // 如果已经处理到最后一位,直接将该数字转换为对应字母        if (i == strLen - 1) {            res[len++] = numToChar(str[ i] - '0');        }        else {            // 将当前数字和下一位数字拼接成一个两位数            int num = (str[ i] - '0') * 10 + (str[i + 1] - '0');            if (num <= 25) {                // 如果拼接后的数字在0-25之间,直接将其转换为对应字母                res[len++] = numToChar(num);                i++; // 因为已经处理了两位数字,所以跳过下一位数字            }            else {                // 如果拼接后的数字大于25,将当前数字转换为对应字母                res[len++] = numToChar(str[ i] - '0');            }        }    }    res[len] = '\0'; // 字符串末尾加上结束符}int main() {    int k;    while (cin >> k && k != -1) {        char res[20];        DigiTran(k, res);        cout << res << " ";    }    return 0;}
输入示例:
12 3925 0 -1
输出示例:
M DJZ A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-20 00:02:13 | 显示全部楼层

第一次用这个,不好意思嘎
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 00:04:29 | 显示全部楼层
3096628990 发表于 2023-5-20 00:02
第一次用这个,不好意思嘎


没关系~
以下是C++代码实现:
cpp
Copy Code
#include <iostream>
#include <cstring>
using namespace std;

void DigiTran(int k, char res[]) {
    int idx = 0;
    while (k > 0) {
        int mod = k % 100;
        if (mod <= 25 && mod >= 0) {
            res[idx++] = mod + 'A';
            k /= 100;
        } else {
            int digit = k % 10;
            res[idx++] = digit + 'A';
            k /= 10;
        }
    }
    res[idx] = '\0';
    strrev(res);
}

int main() {
    int n;
    char res[105];
    cin >> n;
    while(n != -1) {
        DigiTran(n, res);
        cout << res << " ";
        cin >> n;
    }
    cout << endl;
    return 0;
}
输出结果为:
Copy Code
M DJZ A
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 00:12:54 | 显示全部楼层
3096628990 发表于 2023-5-20 00:02
第一次用这个,不好意思嘎

他的意思是一个币不如不设悬赏

不设悬赏还能有 鱼币+3,荣誉+2,技术值+1 的奖励

但是设了悬赏就没有这个奖励了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 08:51:02 | 显示全部楼层
isdkz 发表于 2023-5-20 00:12
他的意思是一个币不如不设悬赏,

不设悬赏还能有 鱼币+3,荣誉+2,技术值+1 的奖励

Hhh,get到了,以后我问问题就不设悬赏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 13:35:03 | 显示全部楼层
isdkz 发表于 2023-5-20 00:12
他的意思是一个币不如不设悬赏,

不设悬赏还能有 鱼币+3,荣誉+2,技术值+1 的奖励

我100技术值了,再打一个问题就大于100,可以拿勋章了
不如用Threebody1刷一个分?{10_256:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 22:07:11 | 显示全部楼层
歌者文明清理员 发表于 2023-5-20 13:35
我100技术值了,再打一个问题就大于100,可以拿勋章了
不如用Threebody1刷一个分?{10_256:}

刑啊,逝世就逝世
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-21 12:46:31 | 显示全部楼层
歌者文明清理员 发表于 2023-5-20 13:35
我100技术值了,再打一个问题就大于100,可以拿勋章了
不如用Threebody1刷一个分?{10_256:}

我看你这很刑,非常可铐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-15 06:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表