您的位置:首页 > 其它

while循环的使用及其和for循环的对比总结

2015-04-06 12:15 543 查看
<1>题目:输入数字m和n,删除第m个数字,并且以下一个数字作为起始,求最后一个数字。

#include<iostream>
#include <vector>
using namespace std;

vector<int> vInt;

void setNext(const vector<int>& v, int& nNowIndex){
//cout<<nNowIndex;
if(nNowIndex == v.size() - 1){
nNowIndex = 0;
}else{
nNowIndex++;
}
if(v[nNowIndex] == 0){
setNext(v, nNowIndex);
}
//cout<<"的下一个索引是:"<<nNowIndex<<endl;
}

void setZeroByNowIndex(vector<int>& v, int& nNowIndex, const int m){
int i = 0;
while(i < m){
setNext(v, nNowIndex);
i++;
}

//cout<<"删除:"<<v[nNowIndex]<<endl;
v[nNowIndex] = 0;
setNext(v, nNowIndex);
//cout<<"下个索引从"<<vInt[nNowIndex]<<"开始"<<endl;
}

void main(){
int n, m;
while(1){
vInt.clear();
cout<<"输入n,m: ";
cin>>n>>m;
for(int i = 0; i < n; i++){
vInt.push_back(i + 1);
}
int nNowIndex = 0;
for(int j = 0; j < n - 1; j++){
setZeroByNowIndex(vInt, nNowIndex, m-1); //循环是从0开始作为第一个的
}

for(int k = 0; k < n; k++){
if(vInt[k] != 0){
cout<<"最后剩余的数字是: "<<vInt[k]<<endl<<endl;
break;
}
}
}
}

/*
输入n,m: 9 5
最后剩余的数字是: 8

输入n,m: 6 4
最后剩余的数字是: 5
*/


总结:

1,查找下一个元素并没有在while中处理0,而是在setNext中处理的

2,while循环中,数组是从0开始的,因此将m减去1,才是要跳过m个数字,主要因为第m哥其实是仅仅跳过m-1个数字

这样就会让while循环执行m次。其实这样一分析就是变形的for循环啊
<2>循环m次,while循环的写法(注意和for循环对比)总结:

外部变量是0的写法

while主体就是

int i = 0;
while(i < 5){
stagement;
i++;
}
外部变量不是0

int i = 5
while(i > 0){
stagement;
i--;
}

<3>while 和 for循环对比总结:

int neighborCol = sp->getCol() - 1;

while (neighborCol >= 0) {
AnimationSprite *neighborSp = m_animalMatrix[sp->getRow() * m_width + neighborCol];
if (neighborSp && neighborSp->getIgnoreCheck()) { //如果此链中有标记为setIgnoreCheck(true)的特殊元素则不检测
chainList.clear();
return;
}

if (neighborSp && (neighborSp->getImgIndex() == sp->getImgIndex()) && !neighborSp->getIgnoreCheck()) {
CloudSprite *cloudSp = m_cloudMatrix[neighborSp->getRow() * m_width + neighborSp->getCol()];
if (cloudSp) {
return;
}

m_checkSpL = true;
chainList.push_back(neighborSp);
neighborCol--;
}
else {
break;
}
}比如这个向左检查所有可以连接的串,显然while循环更擅长做:因为并不知道要循环多少次。这样可以循环到直到结束时才停止。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: