编程简短:需要指针帮助

0 c++

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

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

Ton*_*roy 6

小心你的要求......

#include <iostream>

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

(这还包括错误检查,你没有打扰)

编辑:克里斯在下面的评论表明这是一个简洁的编程挑战(而不是易读性,稳健性等).他的老师声称实施了54个字符.
不得不怀疑是否包含空格和换行符?

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

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

这使用不推荐使用的标头来iostream.h消除显式查找cincout输入的需要std::.它仍然是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);}
Run Code Online (Sandbox Code Playgroud)

...仍然是64个字符.

另一种常用于缩短代码的技术是预处理器技巧,但这里显而易见的一种 - 循环展开 - 看起来并不乐观.它看起来像......

#define X ...
int main(){X X X X X X X X X X}
Run Code Online (Sandbox Code Playgroud)

...但是如果你将for循环代码与#define-necessitated代码进行比较......

for(int i=10,a;i--;)
#define X X X X X X X X X X X
Run Code Online (Sandbox Code Playgroud)

......我们显然倒退了.

总而言之,我简直无法想象任何方法可以从<iostream.h>上面的版本中删除10个字符.如果他有54个字符的实现,我认为这些要求必须在问题中被误传.如果没有,我希望克里斯稍后发布:-).