目录

1.P8598 错误票据

2.P8758 特殊年份

3. P8753 小平方

4. P8780 刷题统计

5. P8760解码

6. P8717 成绩分析​编辑​编辑

7. P8761 大写

8.P8711 整除序列

9.P8722 日期识别

10.  p8680 特别数的和

要点总结:


1.P8598 错误票据

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;


const int N=100010;
int a[N];

int main()
{
	int n;
	cin>>n;
	int cnt=0;
	while(cin>>a[cnt++]);//数据读入数组
	
	sort(a,a+cnt+1);
	
	int ans1,ans2;
	for(int i=0;i<cnt-1;i++)
	{
		if(a[i+1]-a[i]==2)
			ans1=a[i]+1;
		if(a[i+1]==a[i])
			ans2=a[i];
	}
	cout<<ans1<<' '<<ans2<<endl;
	return 0;	
}

2.P8758 特殊年份

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	int n=5;
	int ans=0;
	for(int i=0;i<n;i++)
	{
		string s;
		cin>>s;
		if(s[0]==s[2]&&s[3]-s[1]==1)
			ans++;
	}
	cout<<ans;
	return 0;
}

3. P8753 小平方

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	int n;
	cin>>n;
	int ans=0;
	for(int i=1;i<n;i++)
	{
		int x=i*i;
		if(x%n<n/2.0)
			ans++;
	}
	cout<<ans<<endl;
	return 0;
}

4. P8780 刷题统计

//过不了,时间太长
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	int a,b,n;
	cin>>a>>b>>n;
	int sum=0,cnt=1;
	while(sum<n)
	{
		if(cnt%7>=1&&cnt%7<=5)
			sum+=a;
		else
			sum+=b;
		cnt++;
	}
	cout<<cnt-1<<endl;//因为最后一次多加了一个cnt 
	return 0;
}
//优化版
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	long long int a,b,n;
	cin>>a>>b>>n;
	long long int s=5*a+2*b;//一周做的提数 
	long long int s1=n/s; //做了几周 
	long long int s2=n%s; //做了s1周后还剩几题 
	if(s2<=5*a) //如果工作日能完成 
	{
		cout<<s1*7+(s2+a-1)/a; 
		//s1*7为整周的天数,(s2+a-1)/a是工作日需要的天数 
		//这里是(s2+a-1)/a而不是s2/a是使用了进一法保留整数
		//及2.1保留成3 s1/a是去尾法,在这里不合理
	}
	else
	{
		cout<<s1*7+5+(s2-5*a+b-1)/b;
		//(s2-5*a+b-1)/b是双休日需要的天数 
	}
	return 0;
}

5. P8760解码

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]>='0'&&s[i]<='9')
		{
			for(int j=0;j<s[i]-'0'-1;j++)
				cout<<s[i-1];
		}
		else cout<<s[i];
	}
	return 0;
}

6. P8717 成绩分析

#include<iostream>
#include<cstring>
#include<algorithm>
#include<iomanip>

using namespace std;

int main()
{
	int n;
	cin>>n;
	double x;
	double mi=1e18,mx=0,sum=0;
	for(int i=0;i<n;i++)
	{
		cin>>x;
		mx=max(mx,x);
		mi=min(mi,x);
		sum+=x;
	}
	cout<<mx<<'\n'<<mi<<'\n';
	cout<<fixed<<setprecision(2)<<sum/(n)<<endl;
	return 0; 
}

7. P8761 大写

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	string s;
	cin>>s;
	for(int i=0;i<s.size();i++)
	{
		s[i]=toupper(s[i]);
	}
	cout<<s<<endl;
	return 0;
}

8.P8711 整除序列

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
	long long int n;
	cin>>n;
	while(n>0)
	{
		cout<<n<<' ';
		n/=2;
	}
	return 0;
}

9.P8722 日期识别

#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>

using namespace std;

int main()
{
	string s;
	cin>>s;
	string str1=s.substr(0,3);
	string str2=s.substr(3,2);
	
	map<string,int>mp;
	mp["Jan"]=1;mp["Feb"]=2;mp["Mar"]=3;mp["Apr"]=4;
	mp["May"]=5;mp["Jun"]=6;mp["Jul"]=7;mp["Aug"]=8;
	mp["Sep"]=9;mp["Oct"]=10;mp["Nov"]=11;mp["Dec"]=12;
	
	cout<<mp[str1]<<' ';
	if(str2[0]!='0')//记录错误:str2[0]!=0,此时会输出0,因为此时字符串中的0不是数字而是字符 
		cout<<str2[0];
	cout<<str2[1]<<endl;
	return 0;
}

10.  p8680 特别数的和

#include<iostream>
#include<cstring>
#include<algorithm>
#include<string>

using namespace std;

int main()
{
	int n;
	cin>>n;
	long long int ans=0;
	for(int i=1;i<=n;i++)
	{
		string s=to_string(i);
		for(int j=0;j<s.size();j++)
		{
			if(s[j]=='2'||s[j]=='0'||s[j]=='1'||s[j]=='9')
			{
				ans+=i;
				break;//错误输出718,没有break,会导致重复加,比如20只用加一次,没有break会加两次	
			}	
		}
	}
	cout<<ans<<endl;
	return 0;
}

要点总结:

1.对于“一半”的计算记得加小数点或者*1.0

2.输出两位小数:加头文件#include<iomanip>,cout<<fixed<<setprecision(2)<<num/n;

3.字符串转大写toupper();

4.map、substr()的正确使用。

5.进一法保留整数,即实现四舍五入。

Logo

集算法之大成!助力oier实现梦想!

更多推荐