c++ - 短编程 : need help with pointers

标签 c++

#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;}

这使用已弃用的 header iostream.h无需显式查找 cincoutstd:: .它仍然是 74 个字符(两行都是 LF 换行符)。

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

#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 - 必要的代码...

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

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

总而言之,我简直无法想象有什么方法可以将 <iostream.h> 中的 10 个字符去掉以上版本。如果他有一个 54 个字符的实现,我认为这些要求一定是在问题中被误解了。如果没有,我希望 Chris 稍后发布 :-)。

关于c++ - 短编程 : need help with pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4300344/

相关文章:

c++ - 在类中传递私有(private)变量 - 为什么不允许这样做?

c++ - 两个具有共享缓冲区的等待线程(生产者/消费者)

c++ - 检测到子进程因操作系统内存不足而被终止

c++ - 使用文件中的数据从函数返回数组

c++ - 根据模板参数的模板函数名称

C++11 内存排序——区别?

c++ - 多久*投工作

c++ - 如何将此宏转换为函数模板?

c++ - 更改成员变量顺序时出现堆损坏

c++ - 有没有一种简单的方法可以将枚举类转换为字符串(C++)?