大巴车
大巴车(数组分块,按块翻转,块内不变)
http://www.nowcoder.com/questionTerminal/a776dfef53914c23a4271fc5fe608369
题解
题目难度:简单
知识点:数学逻辑、数组
分析:首先我们将原顺序放入members数组中,对于该分组输出问题,我们需要依次找到每次输出的起始下标和结束下标,可以根据memberCount/carCount的商m值找到每次输出的起始坐标,如第一次为mcarCount,第二次为(m-1)carCount当我们的m值变为-1时,所有分组的顺序都已全部写入辅助orders数组。同时考虑结束位置,对于第一组,其结束位置小标为memberCount-1,其余分组都为该组起始位置+carCount-1(每一辆车转满)。
当memberCount=8,carCount=3时,m=memberCount/carCount=2
#include <iostream> #define Maxn 100000 using namespace std; int members[Maxn]; int orders[Maxn]; int main() { int memberCount, carCount; cin >> memberCount; cin >> carCount; for (int i = 0; i < memberCount; i++) { cin >> members[i]; } int m,n; int falt=0; m=memberCount/carCount; int i=0; while(m>=0) { if(falt==0) { for(int j=m*carCount;j<memberCount;j++) orders[i++]=members[j]; falt=1; } else{ for(int j=m*carCount;j<m*carCount+carCount;j++) orders[i++]=members[j]; } m--; } for(int i=0;i<memberCount;i++) cout<<orders[i]<<endl; return 0; }