Другие языки программирования и технологии
Нужен алгоритм перебора всех вариантов для заданых чисел!!!!
Например- перебрать все возможные варианты для 3, 5, 7 : 3 7 5; 5 3 7; 5 7 3...пока не закончатся варианты. Если можно то на С или Паскале!
#include <stdio.h>
void genhelp(int *a, int l, int n) {
int i;
if (l == n) {
for (i = 0; i < n; ++i) {
printf("%d ", a[ i ]);
}
puts("");
} else {
for (i = l; i < n; ++i) {
int tmp;
tmp = a[ l ]; a[ l ] = a[ i ]; a[ i ] = tmp;
genhelp(a, l + 1, n);
tmp = a[ l ]; a[ l ] = a[ i ]; a[ i ] = tmp;
}
}
}
void gen(int *a, int n) {
genhelp(a, 0, n);
}
int main() {
int a[] = { 1, 2, 3 };
gen(a, 3);
return 0;
}
void genhelp(int *a, int l, int n) {
int i;
if (l == n) {
for (i = 0; i < n; ++i) {
printf("%d ", a[ i ]);
}
puts("");
} else {
for (i = l; i < n; ++i) {
int tmp;
tmp = a[ l ]; a[ l ] = a[ i ]; a[ i ] = tmp;
genhelp(a, l + 1, n);
tmp = a[ l ]; a[ l ] = a[ i ]; a[ i ] = tmp;
}
}
}
void gen(int *a, int n) {
genhelp(a, 0, n);
}
int main() {
int a[] = { 1, 2, 3 };
gen(a, 3);
return 0;
}
можно
Можно так.. .
************************************************************************
WITH w AS (
SELECT 10 nom, 2 cnt FROM dual UNION
SELECT 50 nom, 3 cnt FROM dual UNION
SELECT 100 nom, 9 cnt FROM dual UNION
SELECT 500 nom, 2 cnt FROM dual UNION
SELECT 1000 nom, 1 cnt FROM dual
),
w1 AS (
SELECT nom,cnt,n
FROM (SELECT nom,cnt,n
FROM w
MODEL
RETURN UPDATED ROWS
DIMENSION BY (ROW_NUMBER() OVER (ORDER BY nom) AS rn)
MEASURES (nom,cnt,0 n,0 tc)
RULES ITERATE(20)
UNTIL (PRESENTV(cnt[iteration_number + 1], 1, 0) = 0)
(n[0]=0,tc[0]=0,
n[iteration_number] = cnt[iteration_number] + tc[iteration_number-1],
tc[iteration_number]=
CASE WHEN n[iteration_number]>nom[iteration_number+1]/nom[iteration_number] THEN
trunc((n[iteration_number]-1)/(nom[iteration_number+1]/nom[iteration_number]))
ELSE
0
END,
n[iteration_number] =
CASE WHEN n[iteration_number]>nom[iteration_number+1]/nom[iteration_number] THEN
CASE
WHEN MOD(n[iteration_number],nom[iteration_number+1]/nom[iteration_number])=0 THEN
nom[iteration_number+1]/nom[iteration_number]
ELSE
MOD(n[iteration_number],nom[iteration_number+1]/nom[iteration_number])
END
ELSE
n[iteration_number]
END
)
ORDER BY rn)
WHERE nom IS NOT NULL),
q AS (
SELECT nom n,
ROWNUM rn
FROM w1,
(SELECT ROWNUM rn
FROM (SELECT MAX(m) mm
FROM (SELECT w.nom/(lag(w.nom,1) over (ORDER BY nom)) m
FROM w))
CONNECT BY LEVEL <= mm) pvt
WHERE w1.n>= pvt.rn)
SELECT DISTINCT
SUM(delta) over (ORDER BY rn) summ
FROM (SELECT CASE nvl(lvl - lag(lvl,1) over (ORDER BY rn),1)
WHEN 1 THEN n
WHEN 0 THEN n - lag(n,1) over (ORDER BY rn)
WHEN -1 THEN n - lag(n,1) over (ORDER BY rn) -
to_number(
substr(lag(cbp,1) over (ORDER BY rn),
instr(lag(cbp,1) over (ORDER BY rn),'+',-1,2)+1,
instr(lag(cbp,1) over (ORDER BY rn),'+',-1,1)-
instr(lag(cbp,1) over (ORDER BY rn),'+',-1,2)-1))
END delta,
rn
FROM (SELECT sys_connect_by_path(q.n,'+') cbp,
n,
ROWNUM rn,
LEVEL lvl
FROM q
CONNECT BY PRIOR rn
************************************************************************
WITH w AS (
SELECT 10 nom, 2 cnt FROM dual UNION
SELECT 50 nom, 3 cnt FROM dual UNION
SELECT 100 nom, 9 cnt FROM dual UNION
SELECT 500 nom, 2 cnt FROM dual UNION
SELECT 1000 nom, 1 cnt FROM dual
),
w1 AS (
SELECT nom,cnt,n
FROM (SELECT nom,cnt,n
FROM w
MODEL
RETURN UPDATED ROWS
DIMENSION BY (ROW_NUMBER() OVER (ORDER BY nom) AS rn)
MEASURES (nom,cnt,0 n,0 tc)
RULES ITERATE(20)
UNTIL (PRESENTV(cnt[iteration_number + 1], 1, 0) = 0)
(n[0]=0,tc[0]=0,
n[iteration_number] = cnt[iteration_number] + tc[iteration_number-1],
tc[iteration_number]=
CASE WHEN n[iteration_number]>nom[iteration_number+1]/nom[iteration_number] THEN
trunc((n[iteration_number]-1)/(nom[iteration_number+1]/nom[iteration_number]))
ELSE
0
END,
n[iteration_number] =
CASE WHEN n[iteration_number]>nom[iteration_number+1]/nom[iteration_number] THEN
CASE
WHEN MOD(n[iteration_number],nom[iteration_number+1]/nom[iteration_number])=0 THEN
nom[iteration_number+1]/nom[iteration_number]
ELSE
MOD(n[iteration_number],nom[iteration_number+1]/nom[iteration_number])
END
ELSE
n[iteration_number]
END
)
ORDER BY rn)
WHERE nom IS NOT NULL),
q AS (
SELECT nom n,
ROWNUM rn
FROM w1,
(SELECT ROWNUM rn
FROM (SELECT MAX(m) mm
FROM (SELECT w.nom/(lag(w.nom,1) over (ORDER BY nom)) m
FROM w))
CONNECT BY LEVEL <= mm) pvt
WHERE w1.n>= pvt.rn)
SELECT DISTINCT
SUM(delta) over (ORDER BY rn) summ
FROM (SELECT CASE nvl(lvl - lag(lvl,1) over (ORDER BY rn),1)
WHEN 1 THEN n
WHEN 0 THEN n - lag(n,1) over (ORDER BY rn)
WHEN -1 THEN n - lag(n,1) over (ORDER BY rn) -
to_number(
substr(lag(cbp,1) over (ORDER BY rn),
instr(lag(cbp,1) over (ORDER BY rn),'+',-1,2)+1,
instr(lag(cbp,1) over (ORDER BY rn),'+',-1,1)-
instr(lag(cbp,1) over (ORDER BY rn),'+',-1,2)-1))
END delta,
rn
FROM (SELECT sys_connect_by_path(q.n,'+') cbp,
n,
ROWNUM rn,
LEVEL lvl
FROM q
CONNECT BY PRIOR rn
Похожие вопросы
- Нужен алгоритм перебора массива.
- Алгоритм для машины Тьюринга для переноса числа влево
- Подскажите мне пожалуиста что такое алгоритм и зачем компьютеру. нужен алгоритм.И что такое прога Паскаль и зачем она
- Зачем нужны алгоритмы О(n), O(n!)?
- как посчитать 365! (С++) Нужен алгоритм вычисления факториала больших чисел.
- нужен алгоритм
- а у всех программистов такое - перебор разных вариантов выполнения задачи приносит душевные муки?
- нужен алгоритм !
- Написать программу вывода всех возможных вариантов 3 значного числа без повторений на Паскале
- Pascal => нужна идея, которая поможет мне определить : простое число или нет.