我试图从kickstart开始解决破纪录的一天问题。
我有两个问题:
- 为什么
printf
函数不工作,但cout
完成了工作(这意味着逻辑没有问题( - 代码未通过强制起动中给出的测试用例1的原因
#include <bits/stdc++.h>
using namespace std;
long long solve(){
long long n;
cin >>n;
long long a[n];
for(long long j=0;j<n;j++)
cin>>a[j];
long long k=0,ans=0;
for(long long j=0;j<n-1;j++){
if(a[j]>k){
k=a[j];
if(a[j]>a[j+1]){
ans++;
}
}
}
if(a[n-1]>k)
ans++;
return ans;
}
int main(){
long long t;
cin >> t;
for(long long i=1;i<=t;i++){
printf("Case #%d: %dn",i,solve());//instead of printf() this works: cout<<"Case #"<<i<<": "<<solve()<<endl;
}
return 0;
}
启动后的样本测试用例:
4
8
1 2 0 7 2 0 2 0
6
4 8 15 16 23 42
9
3 1 4 1 5 9 2 6 5
6
9 9 9 9 9 9
打印输出((:
Case #1: 0
Case #2: 0
Case #3: 0
Case #4: 0
预期输出(我用cout得到的输出(:
Case #1: 2
Case #2: 1
Case #3: 3
Case #4: 0
printf
格式代码%d
需要int
而不是long long
。
int
的最大值为2147483647,对于您的使用来说可能足够大。
cout
工作的原因是std::ostream::operator<<
过载以理解long long
值。
您对printf
使用了错误的格式说明符。
%d
格式说明符需要int
,但您传入的是long long
。使用错误的格式说明符会触发未定义的行为。
要打印long long
,您需要使用%lld
。
在cout
上使用<<
运算符会重载各种参数类型,因此它可以根据所选的重载来知道类型。