首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C/ C++访谈:代码优化

C/ C++访谈:代码优化
EN

Stack Overflow用户
提问于 2013-09-04 16:08:05
回答 5查看 3.1K关注 0票数 3

我今天去面试了。这个问题是为了优化下面的代码。如果我们将看到下面的代码后for循环,有四个步骤的“如果-否则”如下。所以,面试官让我把它优化为3条如果-否则的话。我试过很多次了。但无法找到解决办法。甚至他也告诉我,如果你懂脚本语言,你也可以使用它们。请帮我优化一下。

代码语言:javascript
复制
int main()
{
    int i = 1;
    for(i; i <= 100; i++)
    {
        if((i % 3 == 0 && i % 5 == 0))
        {cout << "PR\n";}
        else if(i % 3 == 0)
        {cout << "P\n";}
        else if(i % 5 == 0)
        {cout << "R\n";}
        else
        {cout << i <<"\n";}
    }
system("pause");
return 0;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-04 16:14:01

这是一个众所周知的问题。"FizzBuzz“。

你甚至可以不用任何显式的IFs就能解决它。

代码语言:javascript
复制
const char *messages[] = {"%i\n", "P\n", "R\n", "PR\n"};

for (i=1; i<=100; i++) {
    printf(messages[((i % 3)==0) + 2*((i % 5)==0))], i);
}
票数 4
EN

Stack Overflow用户

发布于 2013-09-04 16:25:26

这里有一种方式,在Python中:

代码语言:javascript
复制
for i in range(1, 101):
    s = ''
    if i % 3 == 0:
        s += 'P'
    if i % 5 == 0:
        s += 'R'
    if i % 3 != 0 and i % 5 != 0:
        s = i
    print(s)

等效地:使用一个标志,如您自己的回答中所示:

代码语言:javascript
复制
for i in range(1, 101):
    s, flag = '', False
    if i % 3 == 0:
        flag = True
        s += 'P'
    if i % 5 == 0:
        flag = True
        s += 'R'
    if not flag:
        s = i
    print(s)

只是为了好玩,Python版本的@6502的答案:

代码语言:javascript
复制
messages = ['{}', 'P', 'R', 'PR']
for i in range(1, 101):
    print(messages[(i%3 == 0) + 2*(i%5 == 0)].format(i))

最后,我个人的最爱(因为它是最短的)--使用最大的公共除数函数和一个查找表:

代码语言:javascript
复制
from fractions import gcd
messages = {3:'P', 5:'R', 15:'PR'}
for i in range(1, 101):
    print(messages.get(gcd(i, 15), i))
票数 3
EN

Stack Overflow用户

发布于 2013-09-04 16:29:30

我找到了解决办法。请让我知道它是好还是坏?

代码语言:javascript
复制
int main()
{
    int i = 1;int stat=0;
    for(i; i <= 100; i++)
    {
        stat=0;
        if(i%3 == 0){stat++; cout << "P";}
        if(i%5 == 0){stat++; cout << "R";}
        if(stat == 0)cout << i;
        cout << "\n";
    }
system("pause");
return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18618800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档