Я решал эту проблему с алгоритмом, но я не могу найти ответ ссылки, как предусмотрено. Любая помощь или подсказка в решении этой проблемы приветствуется.Найти максимальных пользователей в ячейке матрицы размера nxn
Оператор проблемы выглядит следующим образом: В области размера NxN каждая ячейка содержит 1 в момент времени T = 0, где 1 представляет одного пользователя.
Hence, at T= 0 and N = 5 the matrix is as below
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Each cell is a user.
Now at time T =1,2,3 etc the position of each user changes.
if x(row)+y(col) = even
New x = (x+y)^2%N
New y = (x*y)%N
if x(row)+y(col) = odd
New x = (x+y)%N
New y = |x-y|%N
Найти максимальное пользователей на время T = 3 Reference, для N = 5 и T = 3 Максимальное количество пользователей в ячейке должно быть 8.
Я попытался решить эту проблему, но я всегда заканчиваю с 11 в качестве моего max, если я перемещаю всех пользователей и 6, если я перемещаю всего один пользователь каждый раз. Любые советы, по которым я могу ошибиться в понимании или решении этой проблемы, очень ценятся. Спасибо. Ниже мой код, который я использовал для решения этой проблемы Его язык программирования C. Заранее спасибо.
int abs(int y, int x)
{
int temp = x - y;
return temp > 0 ? temp : -temp;
}
int new_x(int x, int y, int n)
{
if((x+y)%2)
return (((x+y)*(x+y))%n);
else
return (x+y)%n;
}
int new_y(int x, int y, int n)
{
if((x+y)%2)
return (x*y)%n;
else
return ((abs(x,y))%n);
}
void print_matrix(int *p, int n, int time)
{
int i,j;
int sum = 0;
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
printf("%d\t",*((p+i*n)+j));
sum += *((p+i*n)+j);
}
printf("\n");
}
printf("Sum = %d\t at T=%d\n",sum, time);
}
int main(void)
{
int T = 3;
int N = 5;
int test_case,i,j,x,y,item, sum, val;
int arr_initial[5][5];
//====================================
//For Time T=0 all elements are 1
//====================================
for(i=0;i<N;i++){
for(j=0;j<N;j++) {
arr_initial[i][j] = 1;
}
}
//=====================================
printf("Initial Matrix at T0 time\n");
print_matrix((int*)arr_initial, N, 0);
printf("\n");
//====================================
//Now calculate the new position for Time T1,T2 & T3
//====================================
for(test_case =1; test_case<=T;test_case++)
{
sum = 0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{//Get NewX and NewY for movement
x = new_x(i,j,N);
y = new_y(i,j,N);
if(x==i && y==j)
{
//No movement as initial and new position is same
}
else{
//There is a movement
item = arr_initial[i][j];
val = item -1;
if(val<0)
{
//no item to move
}
else
{
arr_initial[x][y] += arr_initial[i][j];
arr_initial[i][j] = 0;
}
}
}
}
//=======================================================
printf("\n");
printf("Matrix at Time T = %d\n",test_case);
print_matrix((int*)arr_initial, N, test_case);
printf("\n");
}
return 0;
}
', если ((х + у)% 2)' верно, когда х + 'y' нечетно – BLUEPIXY
Что является ограничением для N и M? проблема заключается в том, когда вы обновляете позицию пользователя, вы обновляете ее напрямую до того же массива, так что вы уже можете изменить ячейку перед чтением и обработкой ее, что приводит к неправильному ответу. –
Привет, спасибо, что указал на ошибки. Ограничение N равно 5 <= N <= 100 и 3 <= T <= 100 – Niel