合力留学网小编给大家带来了杭电ACM2024题求解(杭电acm2024)相关文章,一起来看一下吧。
本文目录一览:
杭电ACM2024题求解
大概看了下,我觉得你得算法可以改进下
不用双重循环,一重就够了
循环。。。
如果
是下标为0 则判断是否为英文字母或下划线
如果
不是下标为0 ,则判断是否为英文字母或下划线或数字
(其中当不符合规范条件时break退出)
最后通过判断是否中途退出,选择输出yes还是no(判断语句是if( i>=sizeof(s)))
杭电acm2024
#include <iostream>
using namespace std;
bool ischar(char ch)
{
return ch>='a'&&ch<='z' || ch>='A'&&ch<='Z';
}
bool isnum(char ch)
{
return ch>='0'&&ch<='9';
}
bool judge(char *a)
{
if(a[0]!='_'&&!ischar(a[0])) return false;
for(int i=1; a[i]; ++i)
if(a[i]!='_'&&!ischar(a[i])&&!isnum(a[i])) return false;
return true;
}
int main()
{
char a[100];
int text, i, j;
cin>>text;
getchar();
for(i=1; i<=text; ++i)
{
cin.getline(a, 100);
if(judge(a)) cout<<"yes\n";
else cout<<"no\n";
}
return 0;
}
杭电acm 2024 我错哪了?
#include<stdio.h>
#include<string.h>
int main(){
char str[1000];
int t,i;
int flag;
scanf("%d",&t);
getchar();
while(t--){
flag=1;
gets(str);
if(!(str[0] == '_'||(str[0]>='A'&&str[0]<='Z')||(str[0]>='a'&&str[0]<='z'))) flag=0;
else for(i=1;i<strlen(str);i++){
if(!(str[i] == '_'||(str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&str[i]<='z')||(str[i]>='0'&&str[i]<='9'))){
flag=0;
break;
}
}
if(flag) printf("yes\n");
else printf("no\n");
}
return (0);
}
首先要明白,标识符有大小写数字和下划线组成(第一个字符由下划线或字母组成)。所以你在判断第一个字符时就判错了(除字母和下划线外都是错误的)
以下是你的代码:
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,l,j,k;
char a[55];
scanf("%d",&n);
for (i=1;i<=n;i++)
{
k=1;
getchar();//用于接受数字后的'\n'字符,应写在for语句前即可.(如test case中在字符串前无数字,则不写getchar();输入一个字符时同理)
gets(a);
l=strlen(a);
if (a[0]>='0' && a[0]<='9')//判断条件错误了
k=0;
for (j=0;j<=l-1;j++)
{
if (a[j]<'0' && a[j]>'9' && a[j]<'a' && a[j]>'z' && a[j]<'A' && a[j]>'Z' && a[j]!='_')
k=0;
else if (a[j]==' ')
k=0;//上面这几句写错了。
}
if (k==0)
printf("no\n");
else
printf("yes\n");
}
return 0;
}
我的AC了的 ,你看看分析分析吧
合力留学网以上就是合力留学网小编给大家带来的杭电ACM2024题求解(杭电acm2024),希望能对大家有所帮助。
免责声明:文章内容来自网络,如有侵权请及时联系删除。