簡體   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