第二问要求看不很明白,X代表数字吗,那b里面X1怎么解释,如果X不代表数字那怎么确定要查询哪一轮呢
反正就是要把第一问中的某一或某些行输出吗?
那可不可以记录一下没轮后的情况,再根据输入解析一下要打印哪些行,给你一段代码参考一下,误输入没处理,越界当掉,自己加一下把void PrintRound ( int nRound , int ** ai ) 
{
printf( "\nROUND%3d   : ",nRound ); 
for(int j=0;j <10;j++)   
printf( "%4d ",ai[nRound][j]); 
}void   main() 

int   a[10]={10,2,8,22,16,4,10,6,14,20}; 
int   i,j,yn,addv; 
printf( "ROUND%3d   : ",0); 
for(j=0;j <10;j++)   
printf( "%4d ",a[j]);  int ** ai = new int * [100] ;  //提供一个保证够用的空间,没分配int,只是100个指针
ai[0] = new int [10] ;
for ( i = 0 ; i < 10 ; i ++ )
{
ai[0][i] = a[i] ;
}
yn=1; 
for   (i=0;yn;i++) 
{   
yn=0; 
printf( "\nROUND%3d   : ",i+1);  addv = ( a[9] + ( a[9]&1 ) ) >> 1;  ai[i+1] = new int [10] ; for(j=0;j <10;j++) 

a[j]=((a[j]+(a[j]&1))>> 1)+addv; 
addv=a[j]-addv; 
yn+=(a[j]^a[0]); 
printf( "%4d ",a[j]); 

ai[i+1][j] = a[j] ;

}  printf ( "\n" ) ;
PrintRound ( 0 , ai ) ; // 输出最初轮
PrintRound ( 3 , ai ) ; // 第三轮
PrintRound ( 5 , ai ) ; // 第五轮
}//*/

解决方案 »

  1.   

    2
    a:在1的基础上加个信号量 如判断Sum == ??
    b:应该和a差不多吧?
    C:仿a 在??范围内输出各站士子弹...
    D:同c
      

  2.   

    建个map <int, vector<int>* >,key值是你轮次的序号,比如第1轮,第2轮;
    vector<int>* 里存那一轮各战士的子弹数;
    每循环一次,new一个vector<int>* ,存各战士的子弹数,存入map;用户想查询是么?
    根据key查询,然后直接来个iterator遍历输出就ok了。
    甚至直接for_each输出就可以了。 STL可以让我们少写很多代码的。
      

  3.   

    vector <int>*  也可以改成map <int, int>* ,key用战士的序号,值保存战士的字段数。
    那么别说输出所有战士的子弹数,指定输出第几轮第几个战士的数量也是轻而易举。 当然vector在不变动元素顺序的情况下也可以实现,但麻烦不是?输出连续的几轮,那么一个for循环,根据序号找最外层map的对应元素,再输出里面的vector的所有值就是。不用别人给你写代码了吧? 给分吧!