巡回置换指k属于[1:n]时,k=p[…p[k]…]的置换。设i=1,2,3,4,5,6,7;p[i]=4,7,3,1,2,5,6;p[i]的巡回置换算法描述:begin local x,k; //x,k为局部变量// k=1; while k<=7 do x=k; repeat print(x); x=p[x]; until x==k; k++; odend按照算法,执行结果为:k=1时,打印 1 4k=2时,打印 2 7 6 5k=3时,打印 3k=4时,打印 4 1k=5时,打印 5 2 7 6k=6时,打印 6 5 2 7k=7时,打印 7 6 5 2我写的程序是#include<iostream.h>void main(){ int p[7]={4,7,3,2,1,5,6}; int x,k; k=0; while(k<=6){ x=k+1; do{cout<<x;x=p[k];}while(x==k+1); k++; }}但是出现了无限执行的情况,循环终止条件x==k1和k<=6不起作用。应该怎么改呢?正确的程序代码是怎样的?
热心网友
你的程序有以下几个错误:1p[7]={4,7,3,1,2,5,6};你写成了4,7,3,2,1,5,62x=p[x-1];你写成了x=p[k]3while(x!=k+1);你写成了while(x==k+1)所以,修改后的程序应该是:#includevoid main(){ int p[7]={4,7,3,1,2,5,6};int x,k;k=0;while(k<=6){x=k+1;do{cout<