<編程珠璣>向量旋轉(旋轉交換) 第三種方法實現代碼, 雜耍,其實也沒那麼容易出錯.

因爲再次看到以前本身分享的 關於 <編程珠璣> 裏 向量旋轉(旋轉交換)的相關代碼.  發現無人關注. 網絡上搜索相關 實現代碼,發現 又長又晦澀. 不易理解. 這裏對以前的分享從新修改,最主要區別是,不計算最小公倍數,改用記錄移動次數做爲循環結束點.力求簡單明瞭.但願有相關學習的同窗發表本身的見解.  編程

/*轉載請註明出處.*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void f(char*,int);

int main(int argc, char *argv[]) {
	char *a; /* 被操做的字符串 */
	int step; /* 移位位置 */

	if(argc < 3) {
		printf("%s%s%s\n", "usage: ", argv[0], " string number\n");
		return -1;
	}

	a = argv[1];
	step = atoi(argv[2]);

	f(a,step);
	printf("%s\n", a);
}


void f(char *a, int step){
	int i=0, j=0;
	int n; /* 字符串長度 */

	int tmp; /* 臨時存儲區域 */
	int movenum = 0; /* 總共移動次數 */

	n = strlen(a) / sizeof(char);
	step = step % n;
	if(!step) return;
	while(movenum < n) {
		tmp = a[i];
		j = i;
		while(((j+step)%n) != i) {
			a[j] = a[((j+step)%n)];
			movenum++;
			j = ((j+step)%n);
		}
		a[j] = tmp;
		movenum++;
		i++;
	}
	//printf("strlen: %d step: %d move: %d\n", n, step, movenum);
}
  編碼,學習, 都是辛苦活, 寫文章,發共享,沒人發工資. 請轉載的朋友註明出處.  不要作伸手黨.
相關文章
相關標籤/搜索