在线评委答错
Wrong answer in online judge
Codeforces问题131A-http://codeforces.com/problemset/problem/131/A我在Windows 7上使用的是Dev C++5.5.2(我输入的语言是Visual Studio 2010 C++)。尽管我在计算机上运行解决方案时得到了正确的输出,但在Codeforces上的测试用例3中我得到了错误的答案。
法官日志:
est:#3,时间:0毫秒,内存:0 KB,退出代码:0,检查器退出代码:1,判决:WRONG_ANSWER输入cAPSlOCK输出带帽螺钉答复cAPSlOCK检查器日志错误答案第一个单词不同-应为:"cAPSlOCK",找到:"cAPSlOCK"
我的解决方案:
#include<iostream>
using namespace std;
char a[101];
int i,b;
int main()
{
cin>>a;
b=a[0];if(b>90)
{
b=b-32;
a[0]=b;
}
for(i=1;a[i]!=NULL;i++)
{
b=a[i];
if(b<97)
{
b=b+32;
a[i]=b;
}
}
cout<<a;
}
我应该在我的解决方案中更改什么,以便它也能在在线法官中正确工作?
对于初学者,您应该使用标准函数isupper
,等等。(在<ctype.h>
中,请记住您必须转换在使用它们之前的任何char
到unsigned char
)。在里面特别是,您的代码似乎假设1)编码ASCII(尽管没有现代机器使用ASCII),以及2)这个单词只包含字母字符。(你也没有检查输入是否成功。)
其次,指定的条件涉及整个字符串,而不是只是第一个字符。只是测试第一个字符不可能足够;必须检查中的每个字符一串(问题的实际规格不是太高清楚的如果有只有一个字母?)
第三,不管结果如何,你都要在变换上循环您的if
。这当然是错误的。
第四,你不交换箱子;你只会破坏小于97.
这里有两个独立的问题。首先是确定caps锁定键是否已设置。最简单的方法是类似于:
if ( std::find_if( word.begin() + 1,
word.end(),
[]( unsigned char ch ) { return !isupper( ch ); } )
== word.end() )
(这是一种简化,因为它对所有一个都返回true字符串。但这是对规格,虽然我觉得不是很直观一个。)
如果您不想使用std::find_if
这样的函数应该将其纳入一个单独的函数:
bool
capsLockSet( std::string const& word )
{
auto current = word.begin() + 1;
while ( current != word.end()
&& isupper( static_cast<unsigned char>( *current ) ) ) {
++ current;
}
return current == word.end();
}
类似地,您可以使用std::transform
进行转换(仅当以上返回true时才执行),或将循环计算在内成为一个单独的功能;在这两种情况下,第一个字符将需要特殊处理,因为如果是小写必须将其转换为鞋面。(如果您有一个先决条件您将看到的唯一字符是ASCII字母,然后您可以通过CCD_ 8在上限和下限之间切换。我推荐反对它,因为它依赖于编码,和事实上,只有信件在场,没有其他信件字符。)
关于"我应该在解决方案中更改什么,使其也能在在线判断中正确工作?"
问题是:只有当单词除第一个字符外都是大写时,才更改单词
错误报告指出:cAPSlOCK应该返回cAPSlOCK,而不是cAPSlOCK
因此,如果不应该更改输入,至少应该在程序中进行检查以输出输入。
关于程序:您可以使用cctype中的助手函数:isupper()
、islower()
、toupper()
和tolower()
,这样您和我们就更容易了解发生了什么。
- 在线编译器中的分段C++没有打印消息
- 在线程之间拆分任务总是值得的吗?
- join() 失败,如果在线程内部调用 io_context.run()
- 如何在C++中在线组装?
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- 在线程函数中处理数据向量时进行线程竞速
- 我应该在线程上调用 processEvents() 吗?
- 如何创建始终在线的过程?
- pthread只有在线程数量较少时才可以正常工作
- boost::asio::io_service 在线程中,不会在应用程序退出时退出
- 如何在线程中初始化对象,然后在其他地方使用它?
- 在线程 A 中创建一个 std::thread 对象,在线程 B 中连接
- C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
- 为什么我的程序无法在GDB在线编译器/调试器或Visual Studio C++ 2019中运行
- 亚马逊在线评估编码问题,以找到第n个几何级数
- C++在线程中将多个对象传递给一个函数
- 在线程C++中创建一个套接字
- 有没有一种方法可以从本地C++程序写入在线CMS中的文件
- 我们如何在线程中使用参数
- 在 "CodePad" 中执行链表操作时转储的核心(这是一个在线C++编译器)