[英]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::
显式查找cin
和cout
的需要。 仍然是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.