字符串左中右noj

发布于:2022-11-02 ⋅ 阅读:(436) ⋅ 点赞:(0)

 

 

第一种方法(但noj会显示超时)

原因是noj不以输入回车结束从而无法结束循环而导致超时

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() { //数学方法
 char a, last_a='-';
 int pri=-1, last_pri = -1;
 int sum = 0;
 while ((a = getchar())!='\n') {
  if (a=='I') {
   pri = 1;
  } else if(a=='V') {
   pri = 5;
  } else if (a=='X') {
   pri = 10;
  }
  if (last_pri==-1) { //第一次不做比较
   last_a = a;
   last_pri = pri;
   sum = pri;
   continue;
  }
  if (pri>last_pri) {
   sum=pri-sum;
  } else {
   sum+=pri;
  }
 }
 printf("%d",sum);
 return 0;
}

第二种(用到了string.h库函数,因为上述原因同样noj无法通过)

/*int main()
{
    char a[10];
    int i=0;
    while((a[i]=getchar())!='\n')  
    {
        i++;
    }
     a[i]='\0';//此时的字符串a最后一位为\0,否则为'\n'
     if(!strcmp(a,"I"))
      printf("%d",1);
     else if(!strcmp(a,"II"))
      printf("%d",2);
     else if(!strcmp(a,"III"))
      printf("%d",3);
     else if(!strcmp(a,"IV"))
      printf("%d",4);
     else if(!strcmp(a,"V"))
      printf("%d",5);
      else if(!strcmp(a,"VI"))
      printf("%d",6);
      else if(!strcmp(a,"VII"))
      printf("%d",7);
      else if(!strcmp(a,"VIII"))
      printf("%d",8);
      else if(!strcmp(a,"IX"))
      printf("%d",9);
      else if(!strcmp(a,"X"))
      printf("%d",10);
      else if(!strcmp(a,"XI"))
      printf("%d",11);
      else if(!strcmp(a,"XII"))
      printf("%d",12);
      return 0;
}*/

可以将其中while循环部分改为:

while(1)

{

a=getchar();

if(a!='X'&&a!='I'&&a!='V')

break;

.....................................//再用第一种方法的逻辑进行运算

}

第三种(,先输入整个字符串再遍历每一个输入的字符,noj可以通过)

/*#include <stdio.h>
#include <string.h>
int main()
{
    int sum;
    int x,y=-1;
    int len;
    char a[20];
    scanf("%s", a);//%s是打印字符串的意思

    len = strlen(a);
    for (int i=0; i<len; i++)
    {
        if(a[i]=='I')
            x=1;
        else if(a[i]=='V')
            x=5;
        else if(a[i]=='X')
            x=10;
        if(y==-1)
        {
            sum=x;
            y=x;
            continue;
        }
        if(x>y)
            sum=x-sum;
        else
            sum=x+sum;
    }
    printf("%d",sum);
}*/


网站公告

今日签到

点亮在社区的每一天
去签到