愿尔安然无恙


私信TA

用户名:H2130819045

访问量:13756

签 名:

向往星辰大海,喜欢落日晚风。

等  级
排  名 63
经  验 10708
参赛次数 16
文章发表 56
年  龄 20
在职情况 学生
学  校 贺州学院
专  业 软件工程

  自我简介:

不想改bug ^_^

解题思路: 用常规取位思路即可,本来第一思路想用 int 和 string 的转换来做,可无奈测试数据太大,会超时~~~

注意事项: while循环取位

参考代码:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int n,m,arr[10];
    while(cin>>n)
    {
        memset(arr,0,sizeof(arr));//数组初始化为0
        for(int i=1;i<=n;i++)
        {
            m=i;
            while(m)//核心思路
            {
                arr[m%10]++;//统计出现次数
                m/=10;
            }
        }
        for(int i=0;i<10;i++)
        {
            cout<<arr[i]<<endl;
        }
    }
    return 0;
}
/*此下为超时代码
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int  main()
{
	string s1,str;
	int p,arr[10]={0},q;//保存页码 
	cin>>p;
	for(int i=1;i<=p;i++)
	{
		stringstream stream;//定义转化对象 
		stream<<i;//读入页码,整数化string 
		stream>>str;//str=stream.str(),流对象,操纵符;//转化为字符串 
		s1+=str;//字符串连接,最终得到包含所有页码的字符串 
	}
	for(int i=0;i<s1.size();i++)
	{
		stringstream stream;//定义转化对象 
		stream<<s1[i];//读入页码 
		stream>>q;//转化为int(数字) 
		arr[q]++;//用数组统计 
	} 
	for(int i=0;i<10;i++)
		printf("%d\n",arr[i]);
	return 0;
}*/


 

0.0分

1 人评分

  评论区

  • «
  • »