Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/34: Рейтинг темы: голосов - 34, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 14.09.2015
Сообщений: 54
1

Сколькими способами гирями заданного набора весов можно составить вес в v грамм?

30.10.2015, 10:17. Показов 6179. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000, 3000 г. Сколькими способами гирями этого набора можно составить вес в v грамм.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2015, 10:17
Ответы с готовыми решениями:

Сколькими способами гирями заданного набора можно составить вес в v грамм
Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1400, 1500, 2000 и 2000г. Сколькими ...

Сколькими способами гирями этого набора можно составить вес в V грамм
Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000 и 3000 г. Сколькими...

Вложенные циклы: Сколькими способами гирями данного набора можно составить вес в v грамм
Имееться 10 гирь весом 100 200 300 500 1000 1200 1400 1500 2000 3000 грамм каждая. Сколькими...

Сколькими способами можно при помощи гирь набрать вес в v грамм
Доброго времени суток. У меня есть задача со следующим условием: . Я написал такой код на C++ и...

3
585 / 488 / 371
Регистрация: 05.11.2013
Сообщений: 1,265
Записей в блоге: 6
30.10.2015, 11:11 2
Достали диофантовыми уравнениями.
Ну, многими способами. Например, для 3 кг 599 способами, а для 9 тебе лучше и не знать
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
45
46
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
 
int main () {
 const int n = 10;
 int *a = (int *)malloc(n*sizeof(int)); //коэффиценты
 a[0]=100;
 a[1]=200;
 a[2]=300;
 a[3]=500;
 a[4]=1000;
 a[5]=1200;
 a[6]=1400;
 a[7]=1500;
 a[8]=2000;
 a[9]=3000;
 int k = 3000; //правая часть
 int *b = (int *)malloc(n*sizeof(int));
 int *c = (int *)malloc(n*sizeof(int));
 int i,j;
 for (i=0; i<n; i++) { b[i]=k/a[i]; c[i]=0; }
 long int s;
 int count=0;
 int found=0;
 do { //Начало цикла перебора
  s=0;
  for (i=0; i<n; i++) s+=a[i]*c[i];
  if (s==k) { //Вывод очередного решения c[i]
   printf ("\n%d) ",++count);
   for (i=0; i<n; i++) {
    printf ("%d*%d",a[i],c[i]);
    if (i<n-1) printf ("+");
   }
   printf ("=%d",k);
  }
  found = 0;
  for (i=n-1; i>-1; i--) {
   if (c[i]==b[i]) for (j=i; j<n; j++) c[j]=0;
   else { c[i]++; break; }
  }
  if (i<0) found = 1;
} while (!found); //Конец цикла перебора
 
fflush(stdin); getchar(); return 0;
}
1
0 / 0 / 0
Регистрация: 14.09.2015
Сообщений: 54
12.11.2015, 17:50  [ТС] 3
Не поможете с корректировкой) Задачу решил, но попросили переписать вот эти циклы одним (это часть кода)
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
#include "foo.h"
void foo(v) {
    int q, w, e, r, t, y, u, i, o, p, z;
    z=0;
    for (q=0; q<2; q++) {
            for (w=0; w<2; w++) {
                for (e=0; e<2; e++) {
                    for (r=0; r<2; r++) {
                        for (t=0; t<2; t++) {
                            for (y=0; y<2; y++) {
                                for (u=0; u<2; u++) {
                                    for (i=0; i<2; i++) {
                                        for (o=0; o<2; o++) {
                                            for (p=0; p<2; p++) {
                                                if (v==q*100+w*200+e*300+r*500+t*1000+y*1200+u*1400+i*1500+o*2000+p*3000) {
                                                    z++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    printf("%d sposobov", z);
}
0
0 / 0 / 0
Регистрация: 10.11.2016
Сообщений: 1
10.11.2016, 15:57 4
я решил эту задачу на паскале. Проверьте, вроде работает
// Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000 и 3000.
//Сколькими способами можно составить вес u граммов (u кратно 100).
var a:array [1..10] of word=(100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000, 3000);
i:byte;
k,s,x,x1,u:integer;

begin
readln(u);
k:=0;
for x:=1 to 1023 do
begin
x1:=x;
s:=0;
for i:=1 to 10 do
begin
s:=s+a[i]*(x1 mod 2);
x1:=x1 div 2;
end;
if s=u then k:=k+1;
end;
writeln(k);
end.
0
10.11.2016, 15:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2016, 15:57
Помогаю со студенческими работами здесь

Сколькими способами можно составить букет?
4)есть 8 разных цветов. Сколькими способами из них можно составить букет, который содержит непарное...

Сколькими способами можно составить букет?
В цветочном киоске 7 видов цветов.Сколькими разными способами можно составить букет,содержащий 3...

Сколькими способами можно составить расписание
В третьем классе изучается 10 предметов. В понедельник 4 урока. Сколькими способами можно составить...

Сколькими способами можно составить букет?
Помогите пожалуйста с задачами. Для закрытия всех долгов не хватает только этого 2. Есть 10...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru