Определить, является ли периодической последовательностью двоичная запись заданного натурального числа - C (СИ)
Формулировка задачи:
Уважаемые! Прошу вас помочь с алгоритмом, так как сам к сожалению ничего придумать не могу.
Условие задачи:
Определить, является ли периодической последовательностью двоичная запись заданного натурального числа N, т.е. имеет ли она вид xx...x, где x - некоторая непустая послед-ть.Решение задачи: «Определить, является ли периодической последовательностью двоичная запись заданного натурального числа»
textual
Листинг программы
#include <conio.h> #include <stdio.h> int toBynar(int val, int *massiv) { int *a = massiv; int koll = 1; do { *massiv = val % 2; val = val / 2; massiv++; koll++; } while (val >= 2); *massiv = val; //---------------------------------------- for (; a < massiv; a++, massiv--) { val = *a; *a = *massiv; *massiv = val; } return koll; } int proverka(int k,int *a) { int c; for(int p=0;p<k;p++) { if(a[p]==1) c=1; else c=0; if (c==0) break; } return c; } void main(){ int x,i,a[n],d[n],b=0,k=0,c=0,p=0,m=0; scanf("%d", &x); int t = toBynar(x,a); for (i=0;i<t;i++){ printf("%d",a[i]); k++; } printf("\n%d",k); for (m=1;m<k;m++){ if (k%m==0 ){ d[b]=m; printf("\n%d",d[b]); b++; } } if ((d[0]==1)&&(proverka(k,a)==1))c=1; if (c==0) { for (b=1;b<=k;b++) { for (p=0;p<=k-b;p++) { if (a[p]==a[p+d[b]]) c=1; else { c=0; break; } } if(c==1)break; } } printf("\n\n\n\n%d",c); _getch();
Объяснение кода листинга программы
- В функции toBynar(), двоичное представление числа val переводится в обратный порядок в массиве *massiv.
- В функции proverka(), проверяется, является ли двоичная последовательность в массиве a периодической.
- В функции main(), считывается натуральное число x, затем определяется его двоичное представление в массиве a с помощью функции toBynar().
- Длина двоичной последовательности в массиве a сохраняется в переменную k.
- В цикле for выводятся все элементы массива a.
- В цикле for проверяется, является ли двоичная последовательность в массиве a периодической с помощью функции proverka().
- Если условие (d[0]==1)&&(proverka(k,a)==1)) выполняется, то c=1.
- В цикле for выводится двоичное представление числа c.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д