0001 #include "UniPrint/print_int_array.h" 0002 #include <numeric> 0003 0004 void shift1(int* A, int n, int k); //µü´ú°æ 0005 void shift2(int* A, int n, int k); //µ¹Öðæ 0006 void shift3(int* A, int n, int k); //»º´æ°æ 0007 0008 int main(int argc, char* argv[]) { 0009 if (argc < 3) { printf("Usage: %s <array_length> <shift>\n", argv[0]); return 1;} 0010 int n = atoi(argv[1]); if (n < 0) return 1; 0011 int k = atoi(argv[2]) % n; if (k < 0 || k > n) return 1; 0012 printf("Shift A[%d] with k = %d ...\n", n, k); 0013 int* A = new int[n] ; 0014 0015 printf("\n== shift algorithm #1 ========\n"); 0016 for (int i = 0; i < n; i++) A[i] = i; print(A, n); 0017 shift1(A, n, k); printf("moves x%d\n", n + std::gcd(n,k)); 0018 0019 printf("\n== shift algorithm #2 ========\n"); 0020 for (int i = 0; i < n; i++) A[i] = i; print(A, n); 0021 shift2(A, n, k); printf("moves x%d\n", n + std::gcd(n,k)); 0022 0023 printf("\n== shift algorithm #3 ========\n"); 0024 for (int i = 0; i < n; i++) A[i] = i; print(A, n); 0025 shift3(A, n, k); printf("moves x%d\n", 3*n); 0026 0027 return 0; 0028 } //main