哨兵变量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出来的

scau 9502 ARDF一个变量的问题的更多相关文章

  1. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  2. grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量

    问一个简单shell问题,将grep的输出赋值给一个变量 用grep命令得到的输出赋值给一个变量不成功. grep命令如下: 代码: $ grep -c '^abc' file.txt 输出为22,表 ...

  3. Javascript如何判断一个变量是数字类型?

    isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN) ...

  4. shell判断一个变量是否为空

    判断一个变量是否为空 . 1. 变量通过" "引号引起来 如下所示:,可以得到结果为 IS NULL. #!/bin/sh para1= if [ ! -n "$para ...

  5. eclipse快速查找一个变量、方法或者类被引用的地方

    最近不停debug,拿到一个变量之后总是要先概览一下才好下手,之前一直用Ctrl+F来做,太麻烦.今天查了下eclipse使用,发现有快捷键,使用方法: 先双击要查看的变量.方法或者类,使之被选中,然 ...

  6. 10.使用final关键字修饰一个变量时...

    10.使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 答:引用不能变,不能将引用再次指向另一个新的对象,但引用所指向的对象中的内容是可以改变的. 补充: 1.对于基本类型,f ...

  7. js判断一个变量是否为数组的解决方案

    前端开发中,在做项目的时候,我们经常需要对一个变量进行数组类型的判断,当然即使你暂时没遇到,但是这个问题也是大家去面试时的高频问题,有必要拿出来说一说. 大家都知道js中可以使用typeof来判断变量 ...

  8. type,isinstance判断一个变量的数据类型

    type,isinstance判断一个变量的数据类型 import types type(x) is types.IntType # 判断是否int 类型 type(x) is types.Strin ...

  9. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

随机推荐

  1. 信竞四定律orz

    正常代码不写#define @zdx 平时刷题不写freopen @liuziwen 循环内部不写return 0 @asdfo123 主程序内不写char array @asdfo123 输出时间: ...

  2. mysql使用replace和on duplicate key update区别

    实际业务使用中,有时候会遇到插入数据库,但是如果某个属性(比如:主键)存在,就做更新.通常有两种方式:1.replace into  2.on duplicate key update 但是在使用过程 ...

  3. ORACLE数据库特性

    目录 ORACLE数据库特性 一.学习路径 二.ORACLE的进程情况 三.ORACLE服务器的启动和关闭 (SQLPLUS环境挂起和恢复等) 连接Oracle的几种方式 四.几个关注点 1. ORA ...

  4. vue+elementui搭建后台管理界面(5递归生成侧栏路由)

    有一个菜单树,顶层菜单下面有多个子菜单,子菜单下还有子菜单... 这时候就要用递归处理 1 定义多级菜单 修改 src/router/index.js 的 / 路由 { path: '/', redi ...

  5. expdp导出卡住问题诊断

    本文链接:https://blog.csdn.net/guogang83/article/details/78800487 [oracle@database ~]$nohup expdp gg/gg ...

  6. 使用adb 命令(atrace)抓起systrace的方法。【转】

    本文转载自:https://www.cnblogs.com/liuliu-word/p/9963017.html adb shell atrace -c -b 10240 --async_start ...

  7. CMU Database Systems - Parallel Execution

    并发执行,主要为了增大吞吐,降低延迟,提高数据库的可用性 先区分一组概念,parallel和distributed的区别 总的来说,parallel是指在物理上很近的节点,比如本机的多个线程或进程,不 ...

  8. linux下如何制作initrd镜像?

    1. 准备文件 加入已经准备好了所有文件在/home/initrd-base目录下 2. 制作initrd镜像 cd /home/initrd-base/ ;find . | cpio --quiet ...

  9. shell编程系列2--字符串的处理

    shell编程系列2--字符串的处理 字符串的处理 .计算字符串的长度 方法1 ${#string} 方法2 expr length "$string" (如果string中间有空 ...

  10. ISO/IEC 9899:2011 条款6.6——常量表达式

    6.6 常量表达式 语法 1.constant-expression conditional-expression 描述 2.一个常量表达式可以在翻译期间被计算,而不是在运行时,并且根据情况可以被用于 ...