1. 程式人生 > >luogu夢中的統計

luogu夢中的統計

text 1.5 原創 pac turn 個數 循環 col 應用

https://www.luogu.org/problemnew/show/P1554

我一上來果斷騙分,因為一開始沒想到怎麽處理取下三位及以上數的每一位,然後我就看了題解。O(∩_∩)O~

題解的思路是用循環處理,每次取最後一位,然後將整個數減少一位。當數不能再減少時,跳出循環。^_^

看代碼咯

#include<iostream>
#include<cstdio>

using namespace std;

int a[11];

int m,n,k;
int main()
{
    scanf("%d%d",&m,&n);
    for(int i=m;i<=n;i++)
    {
        k
=i; do { a[k%10]++; k=k/10; }while(k); } for(int j=0;j<=9;j++) printf("%d ",a[j]); return 0; }

~\(≧▽≦)/~啦啦啦做完了

開心O(∩_∩)O~~


(⊙o⊙)哦!對了,再寫一個題解上的字符串做法。字符串啊啊啊O(≧口≦)O!

題解的做法中用到了sprintf這個函數,先講一下sprintf函數的用法吧(⊙v⊙)

這當然不是原創https://zhidao.baidu.com/question/757355598366787604.html

1.sprintf函數的頭文件是#include<cstdio>

2.sprintf與printf函數的區別:二者功能相似,但是sprintf函數打印到字符串中,而printf函數打印輸出到屏幕上。sprintf函數在我們完成其他數據類型轉換成字符串類型的操作中應用廣泛。

3.可以動態指定,需要截取的字符數

char s1={‘A‘,‘B‘,‘C‘};

char s2={‘T‘,‘Y‘,‘x‘};

sprintf(str,"%.*s%.*s",2,s1,3,s2);

sprintf(s, "%*.*f", 10, 2, 3.1415926);

4.可以打印出i的地址:sprintf(s, "%p", &i);

相當於sprintf(s, "%0*x", 2 * sizeof(void *), &i);

5.sprintf的返回值是字符數組中字符的個數,即字符串的長度,不用再調用strlen(s)求字符串的長度。

6.比如:sprintf(buffer, "%d", 123456);執行後buffer即指向字符串“123456”

#include<iostream>
#include<cstdio>

#include<cstring>
using namespace std;

char s[1001];
int m,n,a[11];
int main()
{
    scanf("%d%d",&m,&n);
    for(int i=m;i<=n;i++)
    {
        sprintf(s,"%d",i);
        for(int k=0;k<strlen(s);k++)
        {
             a[(s[k]-0)]++;
        }
    }
    for(int j=0;j<=9;j++)
    printf("%d ",a[j]);
    return 0;
}

?(^?^*)啦啦啦~\(≧▽≦)/~啦啦啦

luogu夢中的統計