Grigoriy
Grigoriy

помогите исправить код на си

была такая задачка:

В написанном выражении ((((1?2)?3)?4)?5)?6 вместо каждого знака? вставить знак одной из 4 арифметических операций +,-*,/ так, чтобы результат вычислений равнялся 35 (при делении дробная часть в частном отбрасывается) . Найти все решения.

что-то с кодом я через чур намудрил, то ли я цикл закинул, чтобы цифры менялись, то ли что. . .

у меня уже голова кругом идет, вообще перестал соображать

#include "stdafx.h"

#include

#include

#include

#include

#include

#define N 6

void print_arr(int *arr, int n)

{

int i;

for(i = 0; i < n; i++)

printf("%3d", arr[i]);

putchar('\n');

putchar('\n');

}

int main(void)

{

enum op {plus, minus, umn, del}; // 0, 1, 2, 3

int operators[N] = {0};// the elements array can be the digit from 0(ADD) to 3(DIV)

int i, rez, j=1, k, R = 35;

char arr_digits[N+1] = "505597";

for(i = 0; i < N; i++)

{

while(!operators[N-1])

{

///check total

k = 0;

rez = arr_digits[k++] - '0';

while(arr_digits[k])

{

switch(operators[k-1])

{

case plus: rez += (arr_digits[k++] - '0'); break;

case minus: rez -= (arr_digits[k++] - '0'); break;

case umn: rez *= (arr_digits[k++] - '0'); break;

case del: if(arr_digits[k]-'0')rez /= (arr_digits[k++] - '0'); else k++; break;

default: printf("Default"); k++;

}

}

if(rez == 10){

printf("%8s%2c%1d:\n", "Subset",'#',j);

printf("Is Searched!! Rez = %d\n", rez);

print_arr(operators, N-1);

}

j++;

i = 0;

while(operators[i] == 3) operators[i++] = 0;

operators[i]++;

}

}

system("pause");

}

Вячеслав Федоров
Вячеслав Федоров

Как альтернативный вариант 🙂

#include
float pl(float a,float b) { return a+b; }
float mn(float a,float b) { return a-b; }
float ml(float a,float b) { return a*b; }
float dv(float a,float b) { if(b) return a/b; else return 1e10; }
int main()
{ char c[4]; float t,r; int j,k,l, u=35;
float(*p[4])(float,float)={pl,mn,ml,dv};
for(j=-1;++j-4;c[j]=char(49-int(p[j](9.75,4.85)) % 8));
for(j=0;j-1024;j++)
{ for(r=t-u,*((unsigned*)&r)&=0x7FFFFFFF,k=j*4,t=1,l=0;l-5;l++) t=p[((k/=4) % 4)](t,l+2);
if(r>1e-10) continue;
for(printf("%d=((((1",u),k=j*4,l=0;l-4;l++) printf("%c%d)",c[((k/=4)%4)],l+2);
printf("%c%d\n",c[((k/=4)%4)],l+2);
}
return 0;
}

Елена Гурщенко
Елена Гурщенко

во-первых, судя по либам, это не Си, а С++
во-вторых, если просишь "исправить" - говори, где видишь ошибку.

в-третьих, благодаря комментариям в коде даже младенец поймет, как должен работать твой алгоритм, не так ли?

АС
Алексей Смирнов

внутри цикла for по i идет изменение этой переменной.
"Что-то с кодом" - это не объяснение! Ошибку выдает при компиляции? Не работает? Ошибка при выполнении? Неверный результат? В какую сторону копать то?

Артем
Артем

Обсуждали тут уже, юзай mwfix

Похожие вопросы
помогите с кодом на си. пожалуйста
помогите пожалуйста код на си. напишите код
помогите исправить код
Помогите написать код си
Помогите написать код в си
Помогите написать код в Си.
Помогите переделать код с Python на Си++ код ниже.
Помогите поправить код на си++
Помогите исправить программу на языке си++
помогите исправить код с++