2015-05-31 3 views
-4

Так что я делаю проблемы с кодированием HackerRank, и я начинаю программировать. Мой код отлично работает на visual studio и dev C++, даже HackerRank говорит, что мой код работает хорошо. Теперь я не хочу, чтобы вы рассказывали мне, что не так, просто чтобы сказать мне, что есть способ сделать лучший код (возможно, есть), и можно ли положить все для добычи без использования инструкции if. вот вопрос: https://www.hackerrank.com/challenges/c-tutorial-for-loop вот мой код: http://pastebin.com/nWicnYQyc/C++ hackerrank, мой код работает, но im получает 0,38/10 баллов (dunno why) работает код

#include <iostream> 
#include <cstdio> 
using namespace std; 

int main() { 
    int i, n; 
    for(i=0;i<2;i++){ 
    scanf("%d", &n); 

    if(n==1) { 
     printf("one \ntwo \nthree \nfour \nfive \nsix \nseven \neight \nnine \neven \nodd"); 
    } 
    else if(n==2) { 
     printf("two \nthree \nfour \nfive \nsix \nseven \neight \nnine \neven \nodd"); 
    } 
    else if(n==3) { 
     printf("three \nfour \nfive \nsix \nseven \neight \nnine \neven \nodd"); 
    } 
    else if(n==4) { 
     printf("four \nfive \nsix \nseven \neight \nnine \neven \nodd"); 
    } 
    else if(n==5) { 
     printf("five \nsix \nseven \neight \nnine \neven \nodd"); 
    } 
    else if(n==6) { 
     printf("six \nseven \neight \nnine \neven \nodd"); 
    } 
    else if(n==7) { 
     printf("seven \neight \nnine \neven \nodd"); 
    } 
    else if(n==8) { 
     printf("eight \nnine \neven \nodd"); 
    } 
    else if(n==9){ 
     printf("nine \neven \nodd"); 
    } 
    } 
    return 0; 
} 
+3

Я думаю, что вы неправильно поняли вопрос. Вам нужно прочитать два целых числа и распечатать результат для всех целых чисел (с ограничениями включительно). –

+0

Пожалуйста, отредактируйте соответствующий код в вопросе. – shuttle87

+2

* Подсказка: * вопрос особенно содержит информацию о цикле 'for'. Это не для чтения двух целых чисел, а для повторения чисел. –

ответ

2

Этот ответ не полностью ответить на вопрос, но дают достаточно подсказки для ее решения.

Вы, наверное, неправильно спецификации вопроса: вы получаете два числа и б и вам нужно записать что-то около всех чисел между и б (пределами включительно).

вход Чтение

Так как вам нужно перебрать все числа между и б, один лучше сначала читает эти цифры:

int a, b; 
std::cin >> a; 
std::cin >> b; 

Перебор чисел

Следующая вы должны использовать цикл for для повторения чисел n между a и b. Для каждого номера вы должны сделать что-то:

for(int n = <lower>; n <= <upper>; n++) { 
    //do something 
} 

Действие для каждого п

как указано в вопросе, для каждого из этих чисел, вам нужно что-то записать. Если цифры находятся между 1 и 9 (включительно), вам необходимо распечатать английский эквивалент. Длинная последовательность if(x == val) утверждений может быть заменена switch - case заявление:

switch(n) { 
    case 1 : 
     //do something for 1 
     break; 
    case 2 : 
     //do something for 2 
     break; 
    //... 
    case 9 : 
     //do something for 9 
     break; 
    default : 
     //do something if the above didn't match 
     break; 
} 

Если число меньше 1 или больше 9. Программа выполнит корпус default. В этом случае вам нужно проверить, является ли число четным или нечетным и напечатать это. Вы можете сделать это, используя if заявление:

if((n&0x01) == 0x00) { 
    //n is even, do something 
} else { 
    //n is odd, do something 
} 

Комбинируя вышеуказанные шаблоны, вы можете создать программу, которая решает эту проблему.

+1

Спасибо, получил, когда у сказал, что между а и b, получил максимальные баллы! :) Большое спасибо! использовал мой оператор if, но ему нужно было немного исправить: D – panda

+2

'n <' -->' n <= ' – BLUEPIXY

+0

@BLUEPIXY: большое спасибо. –

1
#include <cstdio> 
using namespace std; 

int main() { 
    const char *itself[] = { 
     "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "even", "odd" 
    }; 
    int a, b; 

    scanf("%d %d", &a, &b); 
    for(int n=a; n<=b; ++n){ 
     if(1 <= n && n <= 9) 
      puts(itself[n]); 
     else if(9 < n) 
      puts(itself[ 10 + (n & 1)]); 
    } 
    return 0; 
} 
1

Спасибо за ответ, но я сделал это таким образом. Мой путь длиннее, я должен это исправить. BTW. Могу ли я/Вы удаляете ответы и сохраняете CommuSoft, потому что люди собираются сделать это, поэтому они не просто копируют/вставляют.

#include <iostream> 
#include <cstdio> 
using namespace std; 

int main() { 
    int a, b, n; 
    cin >> a; 
    cin >> b; 
    for (n=a;n<=b;n++){ 

    if(n==1) { 
     printf("one\n"); 
    } 
    else if(n==2) { 
     printf("two\n"); 
    } 
    else if(n==3) { 
     printf("three\n"); 
    } 
    else if(n==4) { 
     printf("four\n"); 
    } 
    else if(n==5) { 
     printf("five\n"); 
    } 
    else if(n==6) { 
     printf("six\n"); 
    } 
    else if(n==7) { 
     printf("seven\n"); 
    } 
    else if(n==8) { 
     printf("eight\n"); 
    } 
    else if(n==9){ 
     printf("nine\n"); 
    } 
    if(n>9){ 
     if(n%2==0){ 
      printf("even\n"); 
     } 
    else{ 
      printf("odd\n"); 
     } 
    } 

    } 
    return 0; 
} 
Смежные вопросы