最近,我开始学习C ++。我着手解决这个问题,寻找平均分数,最高分数和最低分数,缺席学生的人数以及重复的分数。
平均,最低和最高分数以及缺勤学生的数量正在按预期工作。但是,重复的标记无法正常工作。
有问题的案例是案例编号5。
它在某种程度上有效,但是当我输入(1,2,1,2,3备用输入)并且 (1,2,1,2,1)会忽略数字之一/再次打印一些数字。 由于我的知识有限,我不知道该怎么办。这个程序有什么解决方案吗?
我试图消除它,但是正常(不是备用输入)不能正常工作。
您能否提供一种我可以理解的替代方式?
这是我的代码
#include <iostream>
using namespace std;
int main()
{
int Marks[5], i, high, low, menu;
int absent, extra=0, recurr, rcount=0, z;
int hexa=0,seca ,octa=0;
float average, sum = 0;
for(i=0; i<5; i++)
{
cout<<"Enter no of mark:";
cin>>Marks[i];
}
for(i=0; i<5; i++)
if(Marks[i]!=-1)
{
sum=sum+Marks[i];
extra++;
}
cout<<"Choose your operation you want to perform";
cout<<" \n 1.Average marks of the class \n 2.Highest Scores in Class \n 3.Lowest score in class\n 4.No of absent student\n 5.No of recurring element";
cin>>menu;
average=sum/extra;
switch(menu)
{
case 1:
cout<<"Average="<<average;
break;
case 2:
high=Marks[0];
for(i=0; i<5; i++)
if(high<=Marks[i])
high=Marks[i];
cout<<"Highest marks= "<<"\n"<<high;
break;
case 3:
if(Marks[i]!=-1)
{
low=Marks[0];
for(i=0; i<5; i++)
if(Marks[i]!=-1)
if(low>=Marks[i])
low=Marks[i];
cout<<"Lowest Marks="<<"\n"<<low;
}
break;
case 4:
absent=Marks[0];
for(i=0; i<5; i++)
if(Marks[i]==-1) //if -1 is entered it is counted as absent
cout<<"Student no\t"<<i+1<<"\twas abesnt for the exam";
break;
case 5:
//Here is the function that is giving me problem
for(seca=0; seca<5; seca++)
{
recurr=Marks[hexa];
for(i=0; i<5; i++)
if(recurr==Marks[i])
{
rcount++;
z=rcount;
if(z==2)
octa++;
if(octa>2)
octa--;
}
hexa++;
if(z<2)
cout<<"Number "<<recurr<<"is repeated "<<z<<" times\n";
if((octa>1)&&(octa<5))
{
cout<<"Number "<<recurr<<"is repeated "<<z<<" times\n";
octa=0;
}
rcount=0;
}
break;
default:
cout<<"Choose a valid option!!";
}
return 0;
}
答案 0 :(得分:1)
据我说,您应该首先对其进行排序,然后您会发现它很容易计算发生次数。当您不熟悉C ++时,我建议您使用一种叫做Bubble Sort的排序技术,这对您来说很容易:
for(i=0; i<(n-1); i++)
{
for(j=0; j<(n-i-1); j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
现在排序后,如果您仍然发现一些错误或疑问,请仅统计发生的次数,请回复,或者如果您没有找到方法,我将进一步解释:)