题库错题簿51—60

来源:互联网 发布:filco 圣手二代 mac 编辑:程序博客网 时间:2024/05/17 02:16

52.兔子总数问题

int main()

{
int x,i,a[51];
cin>>x;
a[1]=1;
a[2]=2;
for(i=3;i<=50;i++)
{
a[i]=a[i-2]+a[i-1];


}
cout<<a[x];
return 0;

 } 

数组类型从int改为long long就过了,不想说话= =


53.连乘取余问题

int main()
{
int x,y;
long long s=1;
cin>>x>>y;
for(int i=1;i<=x;i++)
{
s=s*2011;
}
cout<<s%(10*y);
return 0;
 } 

原因很简单,虽然定义成long long,但s还是炸了(毕竟是连乘,还是个那么大的数)= =

为了不让它炸掉,只能边乘边对保留位数取余,反正结果只保留后几位,你先取余后取余对结果没影响

这是修改后的程序:

int main()
{
int x,y,n;
long long s=1,m=1;
cin>>x>>y;
for(int j=1;j<=y;j++)

    m=m*10;//m为保留的位数
}
for(int i=1;i<=x;i++)
{
s=s*2011%m;//s边乘边取余,防止炸掉= =
}
if(s*10/m!=0)cout<<s;//判断取余后第一位是否是0,不是就正常输出
else //例如:取后三位,m=1000,后三位乘下来s=021,s*10/m=0210/1000=0,else里的语句就是把取余中的0也输出(无论多少个0)
{
n=m/s;m整除s,看看取余的几位里有多少0(例如,m/s=1000/021=10,一个0;=100就是两个0;=1000就是三个0,以此类推)
for(int i=1;n>1;i++)
{
n=n/10;
cout<<0;//有多少0输出多少
}
cout<<s;

return 0;  
 } 


55.韩信点兵

int main()
{
int a,b,c;
cin>>a>>b>>c;
for(int i=1;i<=1000;i++)
{
     if(i%3==a&&i%5==b&&i%7==c)
{
      cout<<i;
      break;
}
}
return 0;  
 } 

还是不看题目的锅= =

感觉自己莫不是个傻子吧= =


int i;
if(i>=10&&i%3==a&&i%5==b&&i%7==c)
{
      cout<<i;
      break;
}
if(i<10||i>100)cout<<"No answer";


58.不高兴的津津

int main()
{
int a[2][7],b[7],s=0,k=0,l;

for(int i=0;i<2;i++)//错误,先遍历第一列而不是第一行
for(int j=0;j<7;j++)
{
   cin>>a[i][j];
}

for(int j=0;j<7;j++)
{
for(int i=0;i<2;i++)
{
s=s+a[i][j]; 
}
if(s>8)b[k++]=s;
s=0;
}
for(int l=0;l<k;l++)
{
s=b[0];
if(s<b[l])
{
  s=b[l];
}
}
cout<<a[l][1];//错误,不是输出具体节数,是输出第几天~(应该是l不是a[l])
return 0;  
 } 

这道题错误点还挺多的,直接上ace程序比对说明:

int main()
{
int a[7][2],b[10],s=0,k=1,m=0,n=0;

for(int i=1;i<=7;i++)//二维数组理解不到位,行列弄反了word妈
for(int j=1;j<=2;j++)
{
   cin>>a[i][j];
}

for(int i=1;i<=7;i++)
{
for(int j=1;j<=2;j++)
{
s=s+a[i][j]; 
}
    b[k++]=s;//b数组存每天上课总节数
s=0;
}


n=b[1];
for(k=1;k<=7;k++) 
{
if(n<b[k])
{
  n=b[k]; //n存放b数组中最大的那个数
}
}

for(k=1;k<=7;k++)
{
if(n==b[k])break;//遍历b数组,遇到第一个最大值就停下
}

m=k;
if(n>8)cout<<m;//如果第一个最大值>8就输出
else cout<<0;
return 0;  
 } 


59.津津的零花钱(津津怎么这么多事= =)

虽然这道题一开始错了,但问题不大,我就不放源程序了

第一次没过的原因是数组开小了,例如说58(上道题)我定义的是a[7][2],但如果for(int i=1;i<=7;i++)for(int j=1;j<=2;j++),就要开大一个(for循环如果从1开始应该开a[8][3])

但是58是从1开始,我开的a[7][2]反而是ace了啊~

啊啊啊啊不知道,以后还是开大一个好了~

原创粉丝点击