7
回答
《菜鸟求助》C语言的一个基础题让我纠结了三天
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
<无标签>
举报
beak
发帖于4年前 7回/395阅
共有7个答案 最后回答: 4年前

引用来自“wefwefx1”的评论

for 循环,然后取余分配

for(i=0;i<n;i++)//n 为总人数
{
j=i%4;//2个班时
switch(j)
{                                
case 0:c2[n]=g[i],n++;break;    
case 1:c1[m]=g[i],m++;break;
case 2:c1[m]=g[i],m++;break;
case 3:c2[n]=g[i],n++;break;
}
}
如果是具体的班别就知道,但要M个班的话,就不知怎么处理了
--- 共有 1 条评论 ---
惟帅迷风这个程序m代表什么 4年前 回复

引用来自“nocodo”的评论

同意ls

for(i=0;i<n;i++)//n 为总人数 

j=i%4;//2个班时 
switch(j) 
{                                 
case 0:c2[n]=g[i],n++;break;     
case 1:c1[m]=g[i],m++;break; 
case 2:c1[m]=g[i],m++;break; 
case 3:c2[n]=g[i],n++;break; 


如果是具体的班别就知道,但要M个班的话,就不知怎么处理了

int n=20; //假设人数
int num=4;  //假设班级数
int c[100][100]; //班级二维数组,前一下标表示几班,后一下标表示第几个人是多少名
int flag=1,temp=0;

for(int i=1;i<=n;i++)
{
 c[(num+flag)*(flag==-1)+flag*(temp++)][(i-1)/num]=i;
 if(temp==num)
 {
  temp=0;
  flag=-flag;
 }
}



--- 共有 11 条评论 ---
上海什么大学回复 @beak : 他的j就是总人数,nc是班级数,i是一个临时变量,为了正向和反向地给数组赋值。 4年前 回复
beak回复 @JohnnyCage : 野鬼那个,我看不懂那些nc , i ,j代表的是什么 4年前 回复
beak回复 @JohnnyCage : c[(num+flag)*(flag==-1)+flag*(temp++)][(i-1)/num]=i 这最后面的 i 怎么理解的,感觉有点多余的样子 4年前 回复
上海什么大学回复 @beak : 额,我的代码了解了解就OK了,没啥意思,如果你要用的话还是用中山野鬼写的吧 4年前 回复
beak回复 @JohnnyCage : 原来可以这样写表达式的啊,长见识了 4年前 回复

引用来自“JohnnyCage”的评论

int n=20; //假设人数
int num=4;  //假设班级数
int c[100][100]; //班级二维数组,前一下标表示几班,后一下标表示第几个人是多少名
int flag=1,temp=0;

for(int i=1;i<=n;i++)
{
 c[(num+flag)*(flag==-1)+flag*(temp++)][(i-1)/num]=i;
 if(temp==num)
 {
  temp=0;
  flag=-flag;
 }
}



哈,既然都二维数组了,为什么不用双层循环?你这个代码查缺补漏,很麻烦的。还并不一定快。随手写一下,供你参考。如果num >4 简单说不是太少,那么下面的代码不会慢的。相反,你的代码,每个循环里面,光(i-1)/num就能堵半天。特地说这个的意思是,代码描述清晰的可能会有点啰嗦,但不代表效率不高。如果代码又难懂,效率又不高,岂不是折腾别人也折腾自己了。哈。

flag = 0;
while(j < n){
  nc = (j + num <=n) ? num : (n - j) ;
  if (flag & 0x1){
    for(i = num  - 1; i >= num - nc ; i--,j++){
      c[i][flag] = j;
    }
  }else{
    for(i = 0; i < nc ; i++,j++){
      c[i][flag] = j;
    }
  }
  flag++;
}




--- 共有 10 条评论 ---
上海什么大学回复 @中山野鬼 : 噢 4年前 回复
中山野鬼回复 @JohnnyCage : %2 部分编译器会优化不适用除法函数。除法是个函数,你记得就是了。哈。一般是几十到几百个cycle。 4年前 回复
中山野鬼回复 @beak : 哈,套用最近看狄仁杰里的一句台词,“你的问题太多了!”,这些本身不算是问题。 4年前 回复
beak回复 @中山野鬼 : while(j < n) 里面的j 和n 是代表什么?j 不用赋初值? 4年前 回复
上海什么大学回复 @中山野鬼 : 我就想弄明白这样效率是不是比flag%2更快? 4年前 回复
顶部