1. 程式人生 > >旋轉函式(移位加密)- C語言

旋轉函式(移位加密)- C語言

旋轉函式(移位加密)

題目:
給定一個長度為 n 的整數陣列A。假設Bk是陣列A順時針旋轉k個位置後的陣列,我們定義A的“旋轉函式”F為:
F(k) = 0 * Bk[0] + 1 * Bk[1] + … + (n-1) * Bk[n-1]。
計算F(0), F(1), …, F(n-1)中的最大值。
示例:
A = [4, 3, 2, 6]
F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25
F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16
F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23
F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
所以F(0),F(1),F(2),F(3)中的最大值是F(3) =26。

程式碼分享:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int a[100];
	int i,j,k,x,N,s;
	int C[100]={0};
	int max=C[0];
	int R[100]={0};//定義多個數組作為中間變數
	int z[100]={0};
	int v[100]={0};
	int m[100] = {0};
	printf("請輸入陣列元素個數:\n");
	scanf("%d",&N);
	printf("請輸入陣列元素:\n");
	for(i=0;i<N;i++)//迴圈錄入
	{
		scanf("%d",&a[i]);
	}
	printf("使用者錄入陣列元素個數為:%d\n",N);
	printf("使用者錄入元素如下:\n");
	for(i=0;i<N;i++)//迴圈列印
	{
		if(i<N)
		printf("%d,",a[i]);
		else
	{
		printf("%d",a[i]);
	}
    }
   		printf("\n*********************************\n");
	   for(x=0,i=0;x<N;x++,i++)
	   {
	   	m[x]=a[i];
	   }
	   for(x=0;x<N;x++)//列印新陣列值 替代a[i]
	   {
	   	printf("%d\t",m[x]);
	   }
	   printf("\n*********************************\n");
	   for(i=0;i < N;i++)
	   {
	   		for(j = 0; j < N; j++)
	   		{
	   			z[j] = m[(i + j) % N];
	   			//printf("%d",z[j]);
	   		}
		   for(j=0;j<N;j++)//計算
		   {
			v[j] = (j * z[j]);
		   	//v[j]=v[j]+z[j];
		   	R[i] += v[j];
			}
			/*for(s=0;s<N;s++)
			{
			printf("\n%d",v[s]);
			}*/
			printf("\n*%d",R[i]);
			if(max<R[i])
			{
				max=R[i];
			}
			printf("\n%d",max);
		}
	   printf("\n*********************************\n");
	   for(j=0;j<N;j++)
   {
   		printf("F(%d)=",j) ; //j*a[N]+j*a[N-1]
   		for(k=0;k<N;k++)
		   {
			   if(k == 0)
			   {
			   printf("(%d * %d)",k,a[(k+j)%(N)]);
		}
				if(k>0 && k<N)
				{
					printf("+(%d * %d)",k,a[(k+j)%(N)]);
			}

			}
				printf("=%d.",R[j]);

		printf("\n");
		   }
		  printf("\n*********************************\n");
		  printf("\n最大值為:%d",max);
		   return 0;
   }

執行結果:
在這裡插入圖片描述
在這裡插入圖片描述
備註:解決本題目時,作者將題目示例的解題過程,列印了出來,在第二張圖片****之間顯示,但該部分對解決移位加密並無實際用途,只是解題思路的直觀體現。

總結
希望對該題目的程式碼分享能夠幫助到需要的人,也望大佬給出改進意見。