北笙哟 发表于 2021-10-27 23:28:49

各位大神这个goto语句怎么改成其他的语法?学校oj说时间超限了

本帖最后由 北笙哟 于 2021-10-27 23:33 编辑

#include <stdio.h>

int main()
{
        long long int n,M;
        _Bool flag = 1;
        while(flag != 0)
        {
                scanf("%lld",&n);
                if(1 <= n && n < 1000000000)
                {
RETURN:                if(n>100)
                        {
                                M = n - 10;
                        }
                        else if(n <= 100)
                        {
                                if(flag = 1)
                                {
                                        n = n + 11;
                                        goto RETURN;
                                        flag = 0;
                                }
                                else
                                {
                                        goto RETURN;
                                }
                        }
                }
                else
                {
                        flag = 0;
                }
                printf("%lld\n",M);
        }
        return 0;
}

jackz007 发表于 2021-10-28 00:04:37

本帖最后由 jackz007 于 2021-10-28 00:06 编辑

#include <stdio.h>

unsigned long long foo(unsigned long long d)
{
      return (d > 100) ? d - 10 : foo(d + 11)                ;
}

int main(void)
{
      char s                                          ;
      unsigned long long d , i ,n                     ;
      for(n = 0 ;;) {
                gets(s)                                        ;
                if(s) sscanf(s , "%llu" , & d)      ;
                else break                                     ;// 按下空回车键结束输入
      }
      for(i = 0 ; i < n ; i ++) printf("%llu\n" , foo(d)) ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o xx.c

D:\00.Excise\C>x
90
200

91
190

D:\00.Excise\C>

北笙哟 发表于 2021-10-28 00:24:07

jackz007 发表于 2021-10-28 00:04
编译、运行实况:

大神我将您的代码自己运行了,没有错误,可是复制到学校的oj里面又说时间超限欸,您看看?

jackz007 发表于 2021-10-28 00:40:50

北笙哟 发表于 2021-10-28 00:24
大神我将您的代码自己运行了,没有错误,可是复制到学校的oj里面又说时间超限欸,您看看?

      难道是递归浪费了时间?
      再试试这个呢?
#include <stdio.h>

unsigned long long foo(unsigned long long d)
{
      return (d > 100) ? d - 10 : foo(d + 11)               ;
}

unsigned long long foo2(unsigned long long d)
{
      while(d <= 100) d += 11                                 ;
      return d - 10                                           ;
}

int main(void)
{
      char s                                             ;
      unsigned long long d , i ,n                      ;
      for(n = 0 ;;) {
                gets(s)                                       ;
                if(s) sscanf(s , "%llu" , & d)         ;
                else break                                    ;// 按下空回车键结束输入
      }
      for(i = 0 ; i < n ; i ++) printf("%llu\n" , foo2(d)) ;
}
页: [1]
查看完整版本: 各位大神这个goto语句怎么改成其他的语法?学校oj说时间超限了