kavinderrana121 Ответов: 2

C программа о сетевой невральности


Цитата:
Нейронные сети чрезвычайно популярны в области машинного обучения. Нейронная сеть состоит из нескольких слоев. Он имеет входной слой, в котором вы вводите параметр x (вход программы). Затем входные данные проходят через несколько скрытых слоев и, наконец, получают один выходной сигнал на последнем слое, называемом выходным слоем.

У нас есть очень простая нейронная сеть, состоящая из N скрытых слоев. Каждый слой содержит один нейрон. Каждый нейрон имеет два значения, связанные с ним: wi и bi, обозначающие вес и смещение нейрона. Если вы даете нейрона входного сигнала х, он производит мощность (Висконсин * х) + Би.

Таким образом, вход x преобразуется нейронной сетью следующим образом. Первый скрытый нейрон принимает вход x и производит y = w1 * x + b1, который действует как вход для второго нейрона. Затем второй нейрон принимает вход y и выдает выход z = w2 * y + b2. Это происходит постоянно, и Вы получаете один выход в конце от N-го нейрона.

Есть некоторые пользователи, и мы хотим выяснить, спамят они или нет. Они имеют целочисленные идентификаторы пользователей, которые варьируются от Минкс Макс (включительно). Поэтому мы берем каждый из этих идентификаторов пользователя и вводим его в качестве входных данных в первый слой нейронной сети. Если конечный результат четный, то этот пользователь не является спамером, в противном случае пользователь является спамером. Вы должны посчитать количество не-спамеров и спамеров.

Ввод
Первая строка входных данных содержит одно целое число T, обозначающее количество тестовых случаев. Описание тестов t следующим образом.
Первая строка каждого теста содержит три целых числа через пробел N, minX, maxX.
Каждая из следующих N строк содержит два целых числа wi и bi, разделенных пробелами, обозначающих вес и смещение i-го нейрона.
Выход
Для каждого тестового случая выведите два целых числа, разделенных пробелами, обозначающих количество не-спамеров и количество спамеров, соответственно.

Ограничения
1 ≤ T ≤ 10
1 ≤ N ≤ 105
1 ≤ minX ≤ maxX ≤ 109
1 ≤ wi, bi ≤ 109
ОБРАТИТЕ ВНИМАНИЕ, ЧТО МЫ НЕ МОЖЕМ ИСПОЛЬЗОВАТЬ ЗДЕСЬ СТРУКТУРЫ ДАННЫХ И АЛГОРИТМЫ, ЧТО ЭТО ДОЛЖНО БЫТЬ СДЕЛАНО ТОЛЬКО С ПОМОЩЬЮ БАЗОВОГО KNOWLEDGE ПЕТЕЛЬ И Т. Д
ПОЖАЛУЙСТА КТО НИБУДЬ ПОМОГИТЕ МНЕ НАЙТИ ОШИБКУ В МОЕЙ ПРОГРАММЕ Я НОВИЧОК В ПРОГРАММИРОВАНИИ


Что я уже пробовал:

#include<stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t>0){
        int N,minX,manX,w,b,i,z,count=0,countodd=0;
        printf("%d%d",countodd,count);

        scanf("%d%d%d",&N,&minX,&manX);
        int y=minX;
        while(minX<=manX){
            for(i=0;i<N;i++){
                scanf("%d%d",&w,&b);
                y=w*y+b;
            }
            if(y%2==0)
                count++;
            else
                countodd++;
            minX++;
        }
        printf("%d%d",countodd,count);
        t--;
    }
}

2 Ответов

Рейтинг:
2

Rick York

Я бы попробовал поставить несколько пробелов в нескольких местах. Между цифрами на сканфе в первую очередь. В тексте говорится, что они разделены пробелами, поэтому используйте строку формата "%d %d %d" в scanf. Вы также должны иметь их в printfs, потому что это то, что вы должны делать в соответствии с текстом.


Рейтинг:
2

CPallini

Основная проблема вашего кода заключается в попытке прочитать больше входных данных, чем есть: вы пытаетесь прочитать веса внутри петля, идущая от minX к manX Вместо этого вы должны прочитать веса и сохранить их внутри массива, а затем выполнить итерацию из minX к manX

Кстати, почему МанИкс? :-)