scau 9502 ARDF一个变量的问题

本文介绍了一个关于无线电测向运动中摩斯密码识别与转换的问题,涉及到使用C++编程解决问题的过程,包括如何处理字符串匹配及转换为数字进行运算,并最终输出相应的摩斯密码。

哨兵变量flag不小心没 设置成0。。所以一直WA

9502 ARDF

时间限制:1000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC

Description

    ARDF,全称无线电测向。无线电测向运动是竞技体育项目之一,也是无线电活动的主要内容。它类似于众所周知的捉迷藏游戏,但它是寻找能发射无线电波的小型信号源(即发射机),
是无线电捉迷藏,是现代无线电通讯技术与传统捉迷藏游戏的结合。大致过程是:在旷野、山丘的丛林或近郊、公园等优美的自然环境中,事先隐藏好数部信号源,定时发出规定的电报信号。
参加者手持无线电测向机,测出隐蔽电台的所在方向,采用徒步方式,奔跑一定距离,迅速、准确地逐个寻找出这些信号源。以在规定时间内,找满指定台数、实用时间少者为优胜。
通常,
我们把实现巧妙隐藏起来的信号源比喻成狡猾的狐狸,故此项运动又称无线电“猎狐”或抓“狐狸”。
    摩斯密码是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。摩斯密码中,-表示长,.表示短。
摩斯密码表示两个字元是采用直接相连法,即直接将第二个字元的摩斯密码接到第一个字元摩斯密码的后面。一连串的摩斯密码连成一起,就是要发送的信号。
    无线电测向分为2米波段和80米波段,区别在于电波的波长不同,接收用的机器也不同。
而信号源发出的信号为摩斯密码,测向运动两个波段对应的摩斯密码如下:
    号码  2米波段  80米波段
    0     -----    -----
    1     .----    -- ---.
    2     ..---    -- ---..
    3     ...--    -- ---...
    4     ....-    -- ---....
    5     .....    -- ---.....
    6     -....    -....
    7     --...    --...
    8     ---..    ---..
    9     ----.    ----.
    BM是测向新手,对于辨别信号,信号源定位等方法都不太熟悉。现在,又到训练时间了。教练让BM拿了一部测向机在听信号,以训练辨别信号的能力。
不过,变态的教练不仅要BM分辨每个信号源对应是什么数字,还问这两个数字之和对应的摩斯密码是什么!但是,BM却不知道这是哪个波段的信号,又还没有记熟每个号码对应的摩斯密码,咋办?
答不出可是要罚跑华农一圈啊!!!
    Arokenda在训练过程中不忍心看着BM就这样受罚,就帮了BM一把,给了BM一个摩斯密码对应表和破译多位数的方法,说将两个数变成整数再算。
但是听到某一信号时,BM听了很久还没听完。惨了!数位太多,int存不下,这次又咋办?
    Arokenda说:“还不简单,用long long不就行了吗?long long可以表示-2^63至2^63-1之间的整数,而且又没有double只保留16位精度的问题。就像这样:
    #include<stdio.h>
    int main()
    {
     long long a;
     scanf(“%lld”,&a);
     printf(“%lld”,a);
     return 0;
    }
    ”
    就在此时,教练发现他们俩的作弊行为!不解释,罚跑运动场3圈!@#$%^&*
    训练还得继续,面对这魔鬼式训练,BM忍不住向大家求救!你能帮一下BM吗?




输入格式

    输入一个整数T(T<=20),表示教练员有几次测试。
    接下来3行,第一行为一个整数W,表示该信号源是属于哪个波段,2或80。第二、三行为一串摩斯密码,长度不超过90,表示BM听到的两个信号源对应的信号。



输出格式

    每组数据输出一行,输出两个信号源对应数字之和在相应波段下的摩斯密码。




输入样例

5
2
.----
-....
80
-- ---.
-- ---...
80
-- ---....
---..




输出样例

--...
-- ---....
-- ---.-- ---..



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char s2[12][50]={{"-----"},{".----"},{"..---"},{"...--"},{"....-"},{"....."},{"-...."},{"--..."},{"---.."},{"----."}};
char s80[12][50]={{"-----"},{"-- ---."},{"-- ---.."},{"-- ---..."},{"-- ---...."},{"-- ---....."},{"-...."},{"--..."},{"---.."},{"----."}};
void pr (long long int n,int i)
{
	char str[1000][100]={0};
	int h=0;
	int j;
	if (i==2)
	{
		while (n/10>0)//这里先判断他有没有10位。
		//这样,就避免了他是0的情况
		{
            strcpy(str[h++],s2[n%10]);
			n /= 10;
		}
		strcpy(str[h],s2[n]);//加上最后一位
		for (j=h;j>=0;j--)
		{
			printf ("%s",str[j]);
		}
		printf ("\n");
	}
	else
	{
       	while (n/10>0)
		{
            strcpy(str[h++],s80[n%10]);
			n /= 10;
		}
		strcpy(str[h],s80[n]);
		for (j=h;j>=0;j--)
		{
			printf ("%s",str[j]);
		}
		printf ("\n");
	}
	return ;
}
void work()
{
    int m;
	scanf ("%d",&m);
	char str1[100]={0};
	char str2[100]={0};
	getchar();//接收上面M的那个回车
	//就是scanf("%d",&m)的回车
	gets(str1);
	gets(str2);//gets 有吃回车的功能
	 /*
	    printf ("%s\n",str1);
		printf ("%s\n",str2);
	*/
	int i;
	int len1 = strlen(str1);
	int len2 = strlen(str2);
	char str_next[100]={0};//用来判断下一个
	//用于判断80那里的。有重复的嫌疑
	char str_temp[100]={0};
	int h=0;
	int j;
	int f=0;
	int flag;
	long long int number1=0;
	long long int number2=0;
	//long long int sum = number1+number2;
	if (m==2)
	{
		for (i=0;i<len1;i++)
		{
            str_temp[h++] = str1[i];
			//一个一个字符处理,力求取最大的
			flag=0;
			for (j=0;j<10;j++)
			{
				str_temp[h]='\0';
			
				if (strcmp(str_temp,s2[j])==0)
				{
					if (i!=len1-1)
					{
						strcpy(str_next,str_temp);
				                str_next[h]=str1[i+1];
				                str_next[h+1]='\0';
						for (f=0;f<10;f++)
						{
							if (strcmp(str_next,s2[f])==0)
							//如果再取多一个字符,它是存在的
							//那么就选最长得那个
							{
								flag=1;
								break;
							}
						}
					}
					else flag = 0;
					if (!flag)
					{
						number1 = number1*10+j;
						h=0;
						memset(str_temp,0,sizeof(str_temp));
						memset(str_next,0,sizeof(str_next));
					}
				}
			}
		}
		h=0;
		flag=0;
		memset(str_temp,0,sizeof(str_temp));
		memset(str_next,0,sizeof (str_next));
		for (i=0;i<len2;i++)
		{
                       str_temp[h++] = str2[i];
			flag=0;//记得是设置为0
			//刚开始就是一个没设置为0
			//一直WA
			//0代表他再取一个字符,
			//str_next 不存在于s2中
			for (j=0;j<10;j++)
			{
				str_temp[h]='\0';
				
				if (strcmp(str_temp,s2[j])==0)
				{
					if (i!=len2-1)
					{
						strcpy(str_next,str_temp);
				
				        str_next[h]=str2[i+1];
				        str_next[h+1]='\0';
						for (f=0;f<10;f++)
						{
							if (strcmp(str_next,s2[f])==0)
							{
								flag=1;
								break;
							}
						}
					}
					else flag=0;
					if (!flag)
					{
						number2 = number2*10+j;
						h=0;
						memset(str_temp,0,sizeof(str_temp));
						memset(str_next,0,sizeof(str_next));
					}
				}
			}
		}
		pr(number1+number2,2);
	}
	else
	{
		h=0;
		flag=0;
		for (i=0;i<len1;i++)
		{
                    str_temp[h++] = str1[i];
		    flag=0;
			for (j=0;j<10;j++)
			{
				str_temp[h]='\0';
				
				if (strcmp(str_temp,s80[j])==0)
				{
					if (i!=len1-1)
					{
						strcpy(str_next,str_temp);
				
				       str_next[h]=str1[i+1];
				        str_next[h+1]='\0';
						for (f=0;f<10;f++)
						{
							if (strcmp(str_next,s80[f])==0)
							{
								flag=1;
								break;
							}
						}
					}
					else flag=0;
					if (!flag)
					{
						number1 = number1*10+j;
						h=0;
						memset(str_temp,0,sizeof(str_temp));
						memset(str_next,0,sizeof(str_next));
					}
				}
			}
		}
		h=0;
		memset(str_temp,0,sizeof(str_temp));
		memset(str_next,0,sizeof(str_next));
		for (i=0;i<len2;i++)
		{
                    str_temp[h++] = str2[i];
		    flag=0;
			for (j=0;j<10;j++)
			{
				str_temp[h]='\0';
				
				if (strcmp(str_temp,s80[j])==0)
				{
					if (i!=len2-1)
					{
						strcpy(str_next,str_temp);
				
				        str_next[h]=str2[i+1];
				        str_next[h+1]='\0';
						for (f=0;f<10;f++)
						{
							if (strcmp(str_next,s80[f])==0)
							{
								flag=1;
								break;
							}
						}
					}
					else flag=0;
					if (!flag)
					{
						number2 = number2*10+j;
						memset(str_temp,0,sizeof(str_temp));
						memset(str_next,0,sizeof(str_next));
						h=0;
					}
				}
			}
		}
		pr(number1+number2,80);
	}
	return ;
}
int main()
{
	int t;
	scanf ("%d",&t);
	while (t--)
	{
		work();
	}
	return 0;
}

  我的思路是:每个字符地处理,符合的最长串才操作。。

WA我太久了。。告诉同学们。。测试程序的话,,自己想些特殊数据,别太依赖样例

我是用5555DEBUG出来的

转载于:https://www.cnblogs.com/liuweimingcprogram/p/5034361.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值