3532.热河路

文章讨论了在C++编程中,使用scanf与cin进行输入处理时的性能差异。scanf由于预知数据类型而相对较快,而cin需要额外时间判断类型。示例代码显示,当处理大量数据时,scanf可以避免cin导致的超时问题。此外,文章还提到了用bool数组优化空间效率的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

结论

scanf比cin快
因为scanf告知了数据的类型,而cin需要花时间去查找数据的类型

fun1

每段(1, 10, 100…)的开头一位是1,其余都是0
用高斯求和的公式判断给出的数字是否是某一段的第一位
这里一开始用cin,最后一个测试点一直超时,改用scanf就好了

#include<iostream>
#include<math.h>
using namespace std;
int main(){
    int n;
    scanf("%d", &n);
    for(int i=0;i<n;i++){
        int x;
        scanf("%d", &x);
        
        if(x==1||x==2){
        	cout<<"1\n";
        	continue;
		}
        int p = sqrt((x)*2);
        
        if((p+1)*p/2+1==x)cout<<"1\n";
        else	cout<<"0\n";
    }
}

fun2

发现了华点
空间换时间的感觉(初试赋值也挺耗时间)
用个bool数组把所有的1都记录下来
简单粗暴

#include <iostream>
using namespace std;
const int MAX=1e9;
//int arr[MAX]={0};
bool arr[MAX]={false};


int main(){
	int n,i=0,num;
	for(int pos=1;pos<MAX;pos+=i){
		arr[pos]=true;
		i++;
	}
	scanf("%d",&n);
//	cin>>n;
	for(int k=0;k<n;k++){
//		cin>>num;
		scanf("%d",&num);
		if(arr[num])  printf("1\n");	//cout<<"1\n";
		else printf("0\n"); 	//cout<<"0\n";
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值