循环
题目描述
牛牛正在学习See语言程序设计,今天他学到了循环语句。
See语言中的循环语句和C/C++风格类似,为以下格式:
for (i = a; i op b; i += c);
在上述语句中,a b c是整数,op是关系运算符,可能是 <=, >=或者 !=,分别代表小于等于,大于等于、不等于。
循环的执行过程和C语言类似:
1、首先执行赋值语句i = a
2、计算布尔表达式i op b的值,如果为假跳到步骤4,否则继续步骤3
3、执行赋值语句i += c, 既i = i + c,然后跳到步骤2
4、循环结束
需要注意的是,循环变量i的类型是See语言中的整型数,它的取值范围可以很大,不会像C语言中的int一样存在溢出
牛牛希望计算出步骤3(i += c)会执行多少次
输入仅一行四个整数a, op, b, c
其中op = 1代表<=, op = 2代表>=, op = 3代表!=
对于50%的数据,0 <= a, b, c <= 100
对于100%的数据, -109 <= a, b, c <= 109
输出一行一个整数代表步骤3执行的次数,如果循环永远不会终止(死循环)则输出-1
题解:只要先判断op的值,在分类讨论就行了。
#include<bits/stdc++.h> using namespace std; int main() { int op , a , b , c; cin>>a>>op>>b>>c; if(op == 1) { if(a > b) { puts("0"); return 0; } if(c <= 0) { puts("-1"); return 0; } int ans = (b - a)/c + 1; cout<<ans<<endl; } else if(op == 2) { if(a < b) { puts("0"); return 0; } if(c >= 0) { puts("-1"); return 0; } int ans = (b - a)/c + 1; cout<<ans<<endl; } else { if(a == b) { puts("0"); return 0; } if((a < b && c <= 0) || (a > b && c >= 0)) { puts("-1"); return 0; } if((b - a) % c != 0) { puts("-1"); return 0; } printf("%d\n",(b - a) / c); } return 0; }