6-3 pta int decode(char**s)

该博客介绍了一个C语言编程任务,旨在帮助小明找到一个4位数字密码(mima),密码根据古堡大门上5行字符之间的关系确定。每行字符在第一行出现的次数对应密码的每一位。博客提供了裁判测试程序样例和输入输出样例,并要求编写名为decode的函数,接收5行字符串参数并返回密码。

pta,C语言

在一个古堡的大门上有5行字符。其中隐藏着打开大门的mima。mima共有4位数字(0到9)。小明发现了一种找mima的方法:最后一行中的字符在第一行字符中出现的总次数是mima的第一个数字,依此类推。输入数据保证每行得到的数字在0到9之间。 请编写一个函数 decode帮助小明找出mima。
函数接口定义:

int decode(char**s);

通过参数s向函数传递5行字符串,函数返回mima。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#define N 100
#define M 5
int decode(char**s);
int main()
{

    char *s[M];
    int i;
    int key;
    for(i=0; i<M; i++){
        s[i] = (char *)malloc((N+1)*sizeof(char));
        gets(s[i]);
    }


    key = decode(s);
    printf("%04d",key);
    for(i=0; i<M; i++){
        free(s[i]);
    }

    return 0;
}

输入样例:

1111
222
33
41
2341

输出样例:

4322

/* 您提交的代码将放置在这里 */

int decode(char**s){
	int i,j,m[4],k,count;
	for(i=0;i<4;i++){//注意内外循环的顺序
		count=0;
		for(k=0;s[i][k];k++)//第i行的第k个数 
			for(j=0;s[4][j];j++)//第五行的第j个数 
				if(s[4][j]==s[i][k])count++;
			m[i]=count; 
	}
	int mima=0;
	for(i=0;i<4;i++)
		mima=mima*10+m[i];
	return mima;	
}
int MQTT_ReceivelPublish(char *dup, char *qos, char *retain, unsigned short *packet_id, char *redata) { char buffer[512]; // 通用缓冲区 int index = 1; // 从固定头第二个字节开始 /*----------------------------------------------- 步骤1: 解析标志位 -----------------------------------------------*/ *dup = (redata[0] >> 3) & 0x01; // 提取DUP位 *qos = (redata[0] >> 1) & 0x03; // 提取QoS值域 *retain = redata[0] & 0x01; // 提取RETAIN标志 /*----------------------------------------------- 步骤2: 解码剩余长度(变长编码) -----------------------------------------------*/ int remaining_len = 0, multiplier = 1; do { int byte = redata[index++]; remaining_len += (byte & 0x7F) * multiplier; if ((multiplier *= 0x80) > 0x200000) return -1; // 0x80^3=0x200000 } while (byte & 0x80); /*----------------------------------------------- 步骤3: 提取主题内容 -----------------------------------------------*/ int topic_len = (redata[index] << 8) | redata[index + 1]; // 大端序 index += 2; if (topic_len >= sizeof(buffer)) return -3; memcpy(buffer, &redata[index], topic_len); buffer[topic_len] = &#39;\0&#39;; // 主题字符串终止 mqtt_debug(buffer, topic_len, "主题"); index += topic_len; /*----------------------------------------------- 步骤4: 提取报文标识符(仅限QoS 1/2) -----------------------------------------------*/ *packet_id = 0; if (*qos > 0) { *packet_id = (redata[index] << 8) | redata[index + 1]; // 大端序 index += 2; } /*----------------------------------------------- 步骤5: 处理有效载荷 -----------------------------------------------*/ int payload_len = remaining_len - (index - 1); // 计算负载长度 if (payload_len <= 0 || payload_len > sizeof(buffer)) return -2; memcpy(buffer, &redata[index], payload_len); buffer[payload_len] = &#39;\0&#39;; // 有效载荷终止 MQTT_GetData(buffer); // 核心数据处理 mqtt_debug(buffer, payload_len, "消息内容"); WIFI_Clean(); return 0; } 将剩余长度代码单独封装
最新发布
03-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值