我必须提交此代码作为解决方案。我的代码完全针对给定的测试用例运行,但由于代码在解算器中的某个测试失败,我无法提交。如果可以的话请帮忙。任何帮助表示赞赏。
带数字的礼品
许多顾客喜欢上面刻有数字的礼物文章,他们开始购买礼物送给生日和纪念日送礼。一位顾客前来为他母亲的25周年结婚纪念日购买礼物,另一位顾客前来为他儿子的18岁生日购买礼物。他们很失望地看到礼品上只刻着一位数字。
看到这种礼品的热潮,Nisha批量订购了刻有2位数字的礼品。包裹在她忙碌时到达,她4岁的儿子开始将新到的物品安排在架子上展示。但他把所有物品都颠倒了。她需要改变物品的方向。
但令她惊讶的是,她发现一些2位数字在双向阅读时都有效。 [例如。 68读取颠倒将是89这也是一个有效的数字]帮助Nisha识别所有这样的2位数字。
测试用例
输入1
18
输出1
YES
输入2
46
输出2
NO
输入3
A4
输出3
输入无效
C代码:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char str[2];
scanf("%s",str);
int flag=0;
if (strlen(str)!=2)
{
flag=2;goto label;
}
else if (str[1]=='0')
{
flag=1;goto label;
}
for(int i=0;i<2;i++)
{
if(isdigit(str[i]))
{
if((str[i]!='0')&&(str[i]!='1')&&(str[i]!='6')&&(str[i]!='8')&&
(str[i]!='9'))
{
flag=1;break;
}
}
else
{flag=2;break;}
}
label:
if (flag==0) printf("YES");
else if (flag==1) printf("NO");
else if (flag==2) printf("Invalid Input");
return 0;
}
评估后的输出如下:
答案 0 :(得分:2)
该程序的输出不正确,例如对于TypeTag[T]
,因为在检查完第一个数字后你会跳出循环。
该程序的答案为4a
,应为NO
。
答案 1 :(得分:0)
代码的主要问题是以下两行
char str[2];
scanf("%s",str);
当scanf()
输入/转换说明符为&#34;%s&#34;然后该函数将NUL(&#39; \ 0&#39;)字符附加到输入,并且在遇到white space
字符之前不会停止输入。
空格:空格,制表符,换行符序列
因此,使用&#39;%s&#34;输入/转换说明符有两个注意事项:
因此,这两行应该是:
char str[3]; // allows room for 2 characters plus NUL terminator
scanf("%2s",str); // only allow user to input two characters
但是,代码还存在一些其他问题。
这一行:
if (strlen(str)!=2)
当只有一个数字时,不允许。 1 ... 9包含。
使用goto
+标签序列是一种非常糟糕的编程习惯。它在意大利面条中不变的结果是&#39;代码。
此代码块:
else if (str[1]=='0')
{
flag=1;
goto label;
}
不正确,因为它拒绝10,20,30,40,50,60,70,80,90。注意:在C中,数组索引的范围是0 ...(比数字少一个数组中的条目)注意:&#39; 0&#39;是十六进制的0x30,NUL终结符是十六进制的0x00。
这一行:
for( int i=0; i<2; i++ )
假设所有的年龄都是&#39;是2位数字。这不包括1至9岁的年龄。建议:
for( size_t i=0; i<=strlen(str); i++ )
注意:strlen()
返回size_t
,而不是int
,并将索引返回给NUL字符
flag = 2; // initialize to indicate invalid input
if( strlen( str ) )
{ // then some characters entered by user
for( size_t i=0; i<strlen( str ); i++ )
{
... // check for invertible digit
... // check for non digit
}
}
switch( flag )
{
case 0:
printf( "YES\n" );
break;
case 1:
printf( "NO\n" );
break;
default:
printf( "Invalid Input\n" );
break;
} // end switch
// Note: on modern C compilers,
// when the returned value from 'main()' is always 0,
// then no 'return 0;' statement actually needed
return 0;
} // end function: main
但是,当用户输入包含1个可逆数字和1个不可逆数字时,以及当任何用户输入不是数字时,上述代码段不会处理。我会让你提供适当的逻辑。上面的内容应该让你开始朝着正确的方向前进。
答案 2 :(得分:-1)
您可以尝试以下代码!
#include<stdio.h>
#include<string.h>
void main(){
char str[2];
int a,b;
scanf("%s",str);
a=str[0];
b=str[1];
if(strlen(str)!=2)
printf("Invalid Input");
else if(str[0]=='0')
printf("NO");
else if((a>47&&a<58)&&(b>47&&b<58))
{
if(((str[0]=='1')||(str[0]=='6')||(str[0]=='8')||(str[0]=='9'))&&((str[1]=='1')||(str[1]=='6')||(str[1]=='8')||(str[1]=='9')))
printf("YES");
else
printf("NO");
}
else
printf("Invalid Input");
}