Форум программистов, компьютерный форум CyberForum.ru

рекурсивная функция - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить среднее арифметическое элементов, расположенных в вещественном массиве до первого и после последнего нулевых значений. Поменять местами перв http://www.cyberforum.ru/cpp-beginners/thread555296.html
Вычислить среднее арифметическое элементов, расположенных в вещественном массиве до первого и после последнего нулевых значений. Поменять местами первый и максимальный элементы, последний и минимальный элементы. Создать функции для определения среднего значения, максимума и минимума. помогите написать С++ очень надо срочно
C++ Даны текстовые файлы.. [CPPпомогите пожалуйста кто чем может...уду очень приезнатеельна C+-+Даны текстовые файлы f1 и f2. Переписать с сохранением порядка следования компоненты файла f1 в файл f2, а компоненты файла f2 в файл f1. Использовать вспомогательный файл h. Дан текст. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в последнем слове данной строки. в) Найти количество... http://www.cyberforum.ru/cpp-beginners/thread555291.html
C++ Преобразования абстрактного типа при вычислении выражений (переопределение операций)
Добрый день! В процессе изучения С++ столкнулся с нетривиальной трудностью, которую сам для себя никак не могу объяснить. Пусть есть прообраз некоторого типа данных для математических вычислений. Что конкретно он из себя представляет, предполагаю, не имеет значения, важно, что он может быть преобразован к типу float и обратно. Для удобства приведены только объявления соответствующих функций и...
C++ В матрице определить произведение суммы индексов двух максимальных элементов
в двумерном массиве определить произведение суммы индексов двух максимальных элементов главной диагонали а также расположить элементы второго столбца в порядке убывания
C++ Сравнение 2х числовых массивов и генерация 3го http://www.cyberforum.ru/cpp-beginners/thread555261.html
Собственно задание таково: создать два числовых массива, сравнить их и элементы массива m2, которые отсутствуют в массиве m1 записать в массив m3. Вот что написал я: #include <stdio.h> #include <conio.h> #define MAX 50 main(){ int m1, m2, m3, n, i, j; printf("Elementov massiva = "); scanf("%i",&n); printf("M1:\n");
C++ Задача на тексты. Зашифруйте текст, записанный с помощью русских букв и знаков препинания, заменив каждую букву непосредственно следующей за ней по алфавиту. Расшифруйте текст. подробнее

Показать сообщение отдельно
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
23.04.2012, 14:43     рекурсивная функция
Ну то что я использовал динамические массивы, без этого можно обойтись. Ведь у тебя заранее известно, что символов сто штук!
Есть ещё менее оптимальный вариант, который будет перебирать все 2 в сотой степени вариантов сумм чисел.

Это порядка 10000000000000000000000000000000 операций сравнения и сложения

Я не люблю неоптимальные варианты, но всё равно решил сделать его как альтернативу предыдущему решению.
Это несколько не тривиальный алгоритм в отличие от десятков о помощи со школьными заданиями тем в этом разделе.
Но раз тебе задали именно нахождение комбинации, дающей в сумме 100, думаю вы уже прошли многое по оптимизации алгоритмов перебора.
Эта программа читает 100 чисел из файла input.txt, который необходимо создать в папке с программой, и записать в него 100 чисел.
Если требуются пояснения - пиши.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <string.h>
int main(){
  int data[100];
  getdata(data);
  int dgts[100];
  int arws[100];
  int i, j, sum, run, target;
  FILE* in=fopen("input.txt", "r");
  for (i=0; i<100; i++) 
    fscanf(in, "%d", &(data[i]));
  printf("\nread numbers are:\n");
  for (i=0; i<10; i++){
    for(j=0; j<10; j++)
      printf("%d", a[i][j]);
    printf("\n");
  }
  printf("Enter expected sum:");
  scanf("%d", &target);
  memset(dgts, 0, 100*sizeof(int));
  memset(arws, 1, 100*sizeof(int));
  sum=0;
  run=1;
  while(run){
    i=0;
    while((dgts[i]+arws[i])!=0){arws[i]^=1; i++;}
    if (dgts[i]==0){
      dgts[i]=1;
      sum+=data[i];
    }
    else{
      dgts[i]=0;
      sum-=data[i];
    }
    if (sum==target){
      for(i=0; i<100; i++)
        if (dgts[i])printf("%d+", data[i]);
      printf("=%d", target);
      run=0;
    }
  } 
  fclose(in);
  return 0;
}
Добавлено через 16 минут
Ой, ошибка! Условие в цикле (строка 26) должно быть другое.
C++
1
while((dgts[i]+arws[i])!=1){arws[i]^=1; i++;}
 
Текущее время: 18:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru