[英]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.