Через массив

Тема в разделе "C/C++/C#", создана пользователем kerragin, 31 май 2011.

  1. kerragin

    kerragin Гость

    Помогите сделать эту задачу через массивы.Задача сделана через строки,но мне сказали переделать ее через массивы.За ранее спасибо

    Задача:
    Найти все натуральные n-значные числа, цифры в которых
    образуют строго возрастающую последовательность (например,
    1234, 5789).


    Код (C++):
    #include <string>
    #include <iostream>

    using namespace std;

    int main(int argc, char* argv[]) {

    string symbols = "123456789";

    int n = static_cast<int>(symbols.length());

    for(int i=1; i<=n; i++)
    for(int j=0; j<=n-i; j++)
    cout << symbols.substr(j, i) << endl;

    return 0;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Массивы - не прерогатива С++, как на счет С без плюсов ?
     
  3. kerragin

    kerragin Гость

  4. kerragin

    kerragin Гость

    правильно сделано?

    Код (C++):
    #include <stdio.h>
    //#include <string.h>

    int main(int argc, char* argv[])
    {
    const char symbols[] = "123456789";
    int n = sizeof(symbols) - 1;//strlen(symbols);
    int i, j, s;

    for(i=1; i<=n; i++)
    for(j=0; j<=n-i; j++) {
    for(s = 0; s < i; ++s)
    putchar(symbols[j+s]);
    putchar('\n');
    }

    return 0;
    }
    Добавлено: помогите с решением 2 задач

    1)Даны две дроби A/B и C/D (А, В, С, D — натуральные числа).
    Составить программу для умножения дроби на дробь. Результат
    должен быть несократимой дробью.
    2)«Суперзамок». Секретный замок для сейфа состоит из 10
    расположенных в рад ячеек, в которые надо вставить игральные
    кубики. Но дверь открывается только в том случае, когда в любых
    340
    трех соседних ячейках сумма точек на передних гранях кубиков
    равна
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    И все-таки замени "sizeof(symbols) - 1" на "strlen(symbols)"
    Все остальное не проверял на компиляции, но кажется верным.
     
  6. ierofant

    ierofant Гость

    Не надо -1.

    Правильно:
    Код (C++):
    sizeof (symbols)
    У массива нет нуль терминирующего символа.
     
  7. kerragin

    kerragin Гость

    Что-то препода не устроило,он сказал что через функцию надо делать,кстати,можете помочь сделать через функции несколько задач.я их сделал,код рабочий,но не через функции

    1)Даны две дроби A/B и C/D (А, В, С, D — натуральные числа).Составить программу для умножения дроби на дробь. Результат
    должен быть несократимой дробью.

    Код:

    Код (C++):
    #include<iostream>
    int main()
    {int a,b,c,d,p,n,i;
    using namespace std;
    cout<<"vvedite a"<<endl;
    cin>>a;
    cout<<"vvedite b"<<endl;
    cin>>b;
    cout<<"vvedite c"<<endl;
    cin>>c;
    cout<<"vvedite d"<<endl;
    cin>>d;
    p=a*c;
    n=b*d;
    i=2;
    while (i<=p)
    {

    if (p%i==0 && n%i==0)
    {p=p/i;
    n=n/i;}
    else
    i++;
    }
    cout<<p<<"/"<<n;
    }
    Тема "Нерекурсивные процедуры и функции"

    2)Дано n различных натуральных чисел. Напечатать все перестановки

    Код

    Код (C++):
    #include <iostream>
    #include <algorithm>

    int main()
    {
    int arr[] = { 1, 2, 3, 4, 5 };
    size_t len = sizeof(arr) / sizeof(int);

    do
    {
    for (int i = 0; i < len; i++)
    std::cout << arr[i] << " ";
    std::cout << std::endl;
    } while (std::next_permutation (arr, arr + len));

    return 0;
    }
    Тема "Рекурсивные процедуры и функции"
     
  8. kerragin

    kerragin Гость

    помогите !!! :(
     
  9. ierofant

    ierofant Гость

    А что за беда с функциями, я не понимаю... :(
    Код (C++):
    #include <iostream>
    #include <algorithm>

    static void permutations (int *_arr, size_t _len);

    int main()
    {
    int arr[] = { 1, 2, 3, 4, 5 };
    size_t len = sizeof(arr) / sizeof(int);
    permutations (arr, len);

    return 0;
    }

    void permutations (int *_arr, size_t _len)
    {
    for (int i = 0; i < len; i++) std::cout << arr[i] << " ";
    std::cout << std::endl;
    if (std::next_permutation (arr, arr + len)) permutations (arr, arr + len);
    }
     
  10. kerragin

    kerragin Гость

  11. ierofant

    ierofant Гость

    А, ну да. Ну это могли бы и сами подправить по-моему...

    Код (C++):
    void permutations (int *_arr, size_t _len)
    {
    for (int i = 0; i < _len; i++) std::cout << _arr[i] << " ";
    std::cout << std::endl;
    if (std::next_permutation (_arr, _arr + _len)) permutations (_arr, _arr + _len);
    }
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Вот у такого нет:
    Код (C++):
    int arr[] = { 1, 2, 3, 4, 5 };
    А у такого есть:
    Код (C++):
    const char symbols[] = "123456789";
     
  13. ierofant

    ierofant Гость

    Согласен!
     
Загрузка...

Поделиться этой страницей