Через массив

  • Автор темы kerragin
  • Дата начала
K

kerragin

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

Задача:
Найти все натуральные 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;
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Массивы - не прерогатива С++, как на счет С без плюсов ?
 
K

kerragin

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

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
трех соседних ячейках сумма точек на передних гранях кубиков
равна
 
I

ierofant

#6
Не надо -1.

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

kerragin

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

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;
}
Тема "Рекурсивные процедуры и функции"
 
I

ierofant

#9
А что за беда с функциями, я не понимаю... :(
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);
}
 
I

ierofant

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

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);
}