序列七:chapter7 二、课后习题 7.1 这道题应该考虑若最小值不只一个的情况,这时应该把所有最小值的下标都打印出来 #include<iostream> using namespace std; void main() { //int array[10]={12,91,83,12,29,93,56,12,88,72}; int array[10]={34,91,83,56,29,93,56,12,88,72}; int temp[10]={0};//记录所有最小值的下标值,开始时第一个元素最小 int i,count=1,temp2=array[0]; for(i=1;i<10;i++) { if(array[i]==temp2) temp[count++]=i; if(array[i]<temp2) { count=0; temp[count++]=i; temp2=array[i]; } } cout<<"The minimum is "<<temp2<<endl<<"对应的下标有:"; for(i=0;i<count;i++) cout<<temp[i]<<","; cout<<"\n"; } 7.2 这道题考查插入算法,大家应该很熟练掌握各种基本算法的程序,这时当遇到题目的时候马上可以直接套用进来 #include<iostream> using namespace std; void main() { int array[10]={1,15,20,56,80,100,101,101,105,200};//假设原来的数组 int i,insert; cout<<"请输入要插入的值:"; cin>>insert; cout<<"插入前的数值的各个元素值是:"; for(i=0;i<10;i++) cout<<array[i]<<" "; if(array[9]>insert)//只有最大的值必现在要插入的值大才需要插入 for(i=8;i>=0;i--) { if(array[i]>insert) array[i+1]=array[i];//把数值往后移 else break; } array[i+1]=insert; cout<<"\n插入后的数值的各个元素值是:"; for(i=0;i<10;i++) cout<<array[i]<<" "; cout<<endl; } 7.3 这道题其实是课本p140的Josephus问题的一个扩展, #include<iostream> using namespace std; void main() { const int n=17; int child[n]; int i,j,count=n; for(i=0;i<n;i++) child[i]=i+1;//给小孩编号,1,2…… for(i=0,j=0;;j++) { if(j==n)j=0;//从第一个小孩开始从新数 if(child[j]) i++;//当数到一个还没有离开圈的小孩是i增加1, else continue; if(i%3==0)//此时说明又一次达到m值,这时又有一个小孩要离开圈了 { //从新初始化 count--; cout<<child[j]<<" "; child[j]=0; } if(count==1)break;//只剩下一个小孩是就全部结束了 } for(i=0;i<n;i++) if(child[i])break; cout<<"第"<<child[i]<<"个小孩是胜利者\n"; }

评论