繁体   English   中英

简短的编程:需要帮助的指针

[英]Short programming: need help with pointers

#include<stdio.h>    
int main()
{
    int i=10,a;
    while(i>0)
    {
        scanf("%d",&a);
        printf("%d\n",(a+a*a)/2);
        i--;
    }
}

现在我想问的是如何使其更短? 也许以某种方式使用指针而不是变量? 也许这样: (a+a*a)/2可以做得更好?

当心你的要求...

#include <iostream>

int main() 
{
    int a; 
    for (int i = 10;
         i-- && (std::cin >> a) && (std::cout << (a + a * a) / 2); )
        ;
} 

(这还包括错误检查,您无需理会)

编辑:克里斯下面的评论表明这是一个简短的编程挑战(而不是关于易读性,鲁棒性等)。 他的老师要求实现54个字符。
必须怀疑是否包括空格和换行符?

到目前为止,我最严格的实现是:

#include<iostream.h>
int main(){for(int i=10,a;i--;)cin>>a,cout<<(a+a*a)/2;}

这使用了不赞成使用的标头iostream.h来消除在std::显式查找cincout的需要。 仍然是74个字符(两行都是LF换行符)。

作为一个思想实验,假设我们有一个标头“ x”,它声明了函数int g() (从stdin中获取一个int)和void p(int) (将一个int写入stdin)。 然后实现将是...

#include<x>
int main(){for(int i=10,a;i--;)a=g(),p((a+a*a)/2);}

...仍然是64个字符。

通常用于缩短代码的另一种技术是预处理器技巧,但此处显而易见的一种方法-循环展开-看起来没有希望。 看起来像...

#define X ...
int main(){X X X X X X X X X X}

...但如果你比较for循环代码到#define -necessitated代码...

for(int i=10,a;i--;)
#define X X X X X X X X X X X

...我们显然正在倒退。

综上所述,我简直无法想象有什么办法可以减少上述<iostream.h>版本中的10个字符。 如果他有一个54个字符的实现,我认为问题中的要求一定被误解了。 如果没有,我希望克里斯稍后再发布:-)。

可以缩短此时间的一种方法是使用for循环而不是while循环。 尝试使用

for (i = 10; i > 0; --i) {

而不是您当前的while语句。 这消除了对i--;的需要i--; 线。

我不确定通过“使用指针”使这段代码更短意味着什么。 添加指针在这里无济于事。

使用此for循环,您的代码将如下所示:

#include<stdio.h>    
int main()
{
    int i, a;
    for (i = 10; i > 0; --i)
    {
        scanf("%d",&a);
        printf("%d\n",(a+a*a)/2);
    }
}

这将删除一行。 删除更多行的唯一方法是使该代码的可读性降低,或者通过更改代码样式(完全没有必要)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM