noip第三弹 循环语句

本文探讨了noip中循环语句的使用,重点比较了for循环和while循环。作者倾向于使用while循环,并给出了两种循环的示例。通过具体的代码解释,展示了如何实现无限循环以及不同条件下的循环次数控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

循环语句包括for循环和while循环。其中两个可以互相转换。(个人更推荐while循环)

while循环

最简单的while(1)即为无限循环

#include <iostream>
using namespace std;
int main(){
while(1){//其中在计算机中 1 即为真, 0 即为假。真就是做的意思,假就是不做的意思。
printf("hello world\n");
}
return 0;
}

输出为
hello world
hello world
hello world
hello world

然后还可以这样操作。

#include <iostream>
using namespace std;
int main(){
int i=0while(i<3){
printf("hello world\n");
i++;
}
return 0;
}

这就是循环三次:
当i=0的时候i<3成立,循环一次
当i=1的时候i<3成立,循环一次
当i=2的时候i<3成立,循环一次
当i=3的时候i<3不成立,退出循环
结束

其中括号内也可以加输入也就是输入一个数循环一次,再输入一个循环一次,例如

#include <iostream>
using namespace std;
int main(){
int i=0int a[10];
while(cin>>a[i]){
cout<<a[i]+1;
i++;
if(i>=3){
break;
}
}
return 0;
}

先介绍着三种


for循环

for 循环较为简单一点,就只有一种写法

#include <iostream>
using namespace std;
int main(){
int a[10];
for(int i=0;i<20;i++){//大多数时候用i,j,k作为临时的变量。
	cout<<"hello world";
}
return 0;
}

或者也可以在for外面声明i

#include <iostream>
using namespace std;
int main(){
int i;
int a[10];
for(i=0;i<10;i++){//大多数时候用i,j,k作为临时的变量。
	cout<<"hello world";
}
return 0;
}

如果你不需要终止,无限循环直到某种条件再结束循环时,可以写成

for(int i=0;;i++)

记住分号一定还是这么两个
如果你i每次加2或3或。。。时

int n=23;
for(int i=0;i<100;i+=n)

当你在循环内会加很奇怪的一些数,例如

#include <iostream>
using namespace std;
int main(){
int i;
int a[10]={1,2,45,23,1,56,3,7,254,25};
for(i=0;i<110;){
	i+=a[i%10];
}
return 0;
}

如果有哪里没看懂希望评论,感谢。。。

### NOIP 2006 提高组 第三题 题目及题解 #### 题目描述 第三题为 **"作业调度方案"**,题目要求根据给定的工件、工序以及机器的工作安排,计算出完成所有工件所需的最短时间。具体问题涉及多个工件,每个工件包含若干道工序,每道工序需要在指定的机器上完成,并且每道工序有固定的时间消耗。此外,还给出了一个工件的加工顺序,要求按照该顺序安排所有工件的加工计划,使得总加工时间最短。 --- #### 解题思路 该问题属于经典的作业调度问题,可以通过模拟的方式解决。以下是具体的解题步骤: 1. **初始化数据结构** - 使用数组或向量记录每个机器的时间轴,表示每台机器在不同时间点的状态(空闲或忙碌)。 - 记录每个工件的工序信息,包括工序对应的机器编号和所需时间。 2. **按照给定顺序处理工件** - 对于每一个工件,按照其工序顺序依次安排到对应的机器上。 - 找到当前工序可以插入的时间段,更新机器的时间轴,并记录工序的结束时间。 3. **计算总加工时间** - 在安排完所有工件后,取所有机器中最后一个工序的结束时间作为最终结果。 --- #### 示例代码实现 以下是一个基于上述思路的 C++ 实现[^4]: ```cpp #include <bits/stdc++.h> using namespace std; const int MAXM = 50; // 最大机器数量 const int MAXN = 50; // 最大工件数量 const int MAXP = 12; // 每个工件最大工序数 int m, n; // 机器数量和工件数量 int order[MAXN + 1]; // 工件加工顺序 int machine[MAXP][MAXN + 1]; // 工件 i 的第 j 道工序使用的机器编号 int timeCost[MAXP][MAXN + 1]; // 工件 i 的第 j 道工序所需时间 long long endTime[MAXM + 1]; // 每台机器的当前结束时间 int main() { // 输入数据 cin >> m >> n; for (int i = 1; i <= n; ++i) { cin >> order[i]; } for (int i = 1; i <= n; ++i) { int p; // 工序数量 cin >> p; for (int j = 1; j <= p; ++j) { cin >> machine[j][i] >> timeCost[j][i]; } } // 初始化机器结束时间 fill(endTime + 1, endTime + m + 1, 0); // 按照给定顺序处理工件 for (int i = 1; i <= n; ++i) { int job = order[i]; int p; // 当前工件的工序数量 cin >> p; for (int j = 1; j <= p; ++j) { int currentMachine = machine[j][job]; int currentCost = timeCost[j][job]; // 找到当前工序可以插入的时间段 long long startTime = max(endTime[currentMachine], endTime[currentMachine]); endTime[currentMachine] = startTime + currentCost; } } // 输出总加工时间 long long result = 0; for (int i = 1; i <= m; ++i) { result = max(result, endTime[i]); } cout << result << endl; return 0; } ``` --- #### 注意事项 - 在安排工序时,必须确保每道工序都按照给定的顺序进行,不能随意调整顺序。 - 每台机器的时间轴需要动态更新,以确保后续工序能够正确插入。 - 如果某道工序的开始时间晚于当前机器的结束时间,则需要等待机器空闲后再开始。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值