Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 学生评分问题中的无限循环(黑客等级)_C++_Algorithm - Fatal编程技术网

C++ 学生评分问题中的无限循环(黑客等级)

C++ 学生评分问题中的无限循环(黑客等级),c++,algorithm,C++,Algorithm,以下是问题陈述: 哈克兰大学有以下分级政策: 每个学生都会获得0到100的“分数”。 任何低于“40”的“等级”都是不合格等级 Sam是该大学的教授,喜欢根据以下规则对每个学生的“分数”进行四舍五入: 如果“等级”与下一个5的倍数之间的差值小于3,则将“等级”四舍五入至下一个5的倍数。 如果“等级”的值小于38,则不会进行四舍五入,因为结果仍然是不合格等级 例如,“grade=84”将四舍五入到85,但“grade=29”将不会四舍五入,因为四舍五入将导致小于“40”的数字 为每个Sam的n”学

以下是问题陈述:

哈克兰大学有以下分级政策:

每个学生都会获得0到100的“分数”。 任何低于“40”的“等级”都是不合格等级

Sam是该大学的教授,喜欢根据以下规则对每个学生的“分数”进行四舍五入:

如果“等级”与下一个5的倍数之间的差值小于3,则将“等级”四舍五入至下一个5的倍数。 如果“等级”的值小于38,则不会进行四舍五入,因为结果仍然是不合格等级

例如,“grade=84”将四舍五入到85,但“grade=29”将不会四舍五入,因为四舍五入将导致小于“40”的数字

为每个Sam的n”学生提供初始值“grade”,编写代码以自动执行舍入过程

#包括
使用名称空间std;
int main()
{
int n,x;
cin>>n;
对于(int i=0;++i;i=38)
{
cin>>x;
int y=x;
而(1)
{
如果(y%5==0)
打破
y++;
}

如果(y-x你让它变得比需要的更难:

#include<iostream>

int main()
{
  int n, x;
  std::cin >> n;
  for(int i = 0; i < n; ++i)
  {
    std::cin >> x;
    x = (x - 5 * (x / 5) < 3) || x < 38 ? x : 5 * ((x + 2) / 5);
    std::cout << x << std::endl;
  }
  return 0;
}
#包括
int main()
{
int n,x;
标准:cin>>n;
对于(int i=0;i>x;
x=(x-5*(x/5)<3)| | x<38?x:5*((x+2)/5);

std::cout你的这部分错了

for (int i = 0; ++i; i<n)
  {
    if(x >= 38)
    {
      cin >> x;
      int y = x;
for(int i=0;++i;i=38)
{
cin>>x;
int y=x;
做到这一点:

for (int i = 0; i < n; i++)
  {
    cin >> x;
    if(x >= 38)
    {
      int y = x;
for(int i=0;i>x;
如果(x>=38)
{
int y=x;
你做错了两件事:

  • 您交换了测试表达式和增量部分。因此for循环的工作方式是:设置->循环部分(您的代码)->增量->测试表达式。您的测试表达式始终为true,因为
    ++i
    基本上在递增后返回对
    i
    的引用(因为它不是零,所以计算结果为
    true

  • 在输入
    if
    之前,您需要进行输入检查


  • 是时候学习如何使用调试器在监视变量及其值的同时逐条检查代码语句了(int i=0;++i;i@Someprogrammerdude在线平台的一个缺点是没有合适的调试器。但是,即使在使用mingw的windows上,也可以很容易地免费设置eclipse/gcc。另外,如果(x>=38),则使用x,但从不初始化try来学习调试。@这有点“代码高尔夫”但它将舍入算法封装在一行代码中我喜欢短代码,但我更喜欢可读代码。当有人试图理解、修复或更改它时,这种长表达式可能会引起很多头痛。即使对于有经验的程序员来说,快速解析它也不是一件小事。也许我遗漏了一些东西,但为什么我们甚至需要它呢
    (x-5*(x/5)<3)
    部分?舍入不包括38以上的所有情况吗?@操作只提到舍入,而不是舍入。没有这个位,您也会舍入38以上。