p1089
别人的AC代码
#include<iostream>
using namespace std;
int money,cost,mama,flag=1,monthofdeath; //money代表在津津手里的钱,cost代表花费的钱,mama代表在妈妈手里的100元的张数,flag=1代表尚未透支,monthofdeath代表死亡月份
int main ()
{
for(int i=1;i<=12;i++)
{
money+=300; //每个月津津手里的钱都会增加300
cin>>cost; //输入这个月的花销
money-=cost; // 津津手里的钱减去这个月的花销等于剩余的钱
if(money<0) //若剩余的钱小于0,
{
flag=0; //旗帜倒下,即已经透支
monthofdeath=i; //输出死亡月份
break; //终止循环
}
mama+=money/100; //剩余的钱整除100即为在妈妈手里的100元的张数
money%=100; //用100去模剩余的钱即为月底幸存的钱
}
if(flag==1) //若旗帜未倒下,即坚持到年底还没有透支
{
money+=mama*120; //剩余的钱
cout<<money;
}
else
{
cout<<-monthofdeath;
}
return 0;
}
我就把变量声明移了一下,就wrong了,也不知道为什么,呜呜呜,这道题我写了好久都没有AC,我真的是一个废物啊啊啊啊啊。
#include<iostream>
using namespace std;
//money代表在津津手里的钱,cost代表花费的钱,mama代表在妈妈手里的100元的张数,flag=1代表尚未透支,monthofdeath代表死亡月份
int main ()
{int money,cost,mama,flag=1,monthofdeath;
for(int i=1;i<=12;i++)
{
money+=300; //每个月津津手里的钱都会增加300
cin>>cost; //输入这个月的花销
money-=cost; // 津津手里的钱减去这个月的花销等于剩余的钱
if(money<0) //若剩余的钱小于0,
{
flag=0; //旗帜倒下,即已经透支
monthofdeath=i; //输出死亡月份
break; //终止循环
}
mama+=money/100; //剩余的钱整除100即为在妈妈手里的100元的张数
money%=100; //用100去模剩余的钱即为月底幸存的钱
}
if(flag==1) //若旗帜未倒下,即坚持到年底还没有透支
{
money+=mama*120; //剩余的钱
cout<<money;
}
else
{
cout<<-monthofdeath;
}
return 0;
}
我好像明白了一点
flag
被显式初始化为 1:flag=1
money
、cost
和mama
没有显式初始化,它们默认初始化为 0,因为它们是整型变量(int
类型)。- 在C++中,局部变量(即在函数或代码块内部声明的变量)不会自动初始化为0或任何其他默认值。如果局部变量没有被显式初始化,它们的值是未定义的。这意味着在实际使用这些变量之前,你不能假定它们具有任何特定的值。
- 在C++中,全局变量如果没有显式地初始化,它们会被默认初始化为0。