九九八十一

90 阅读1分钟

题目链接

题目描述

大家都是小孩子呢


int n=9;
   for(int i=1;i<=n;i++,puts(""))
      for(int j=1;j<=i;j++)
         printf("%d*%d=%d,",j,i,i*j);

上面的代码运行之后可以输出一份大家熟知的九九乘法表,展示了10以内的两数相乘和结果。

Maplef很好奇对于一个正整数n,n*n乘法表中,字符c的次数。

可是Maplef最近沉迷于睡大觉,所以就交给你来告诉她答案啦

输入描述:

两行,第一行一个字符,表示询问的字符c 第二行一个正整数n(9<=n<=100),表示乘法表的范围

输出描述:

一个整数,表示字符c在n*n乘法表中出现的次数

输入

9
9

输出

13

解题思路

这道题通过率很低,但并不是很难给我们一个数n和一个字符c,让我们求n * n乘法表中c出现的个数。其实,并不难,最主要的一点就是将int类型的数据,转换为string类型。每次两个数相乘,得到一个结果字符串s,记录s中c出现的次数即可。

这里我用一个to_String()方法来将一个int类型数据转换为字符串类型。

需要特别注意的是:,和 = 也可能是字符c!!!不要把它们忘了。
还要注意的是第一个给出的是字符c,第二个才是n,不要搞混!!!!

AC代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;

#define max 100
string to_String(int x)
{
int m = x;
char s[max];
char ss[max];
int i = 0, j = 0;
if (x < 0)// 处理负数
{
m = 0 - m;
j = 1;
ss[0] = '-';
}
while (m > 0)
{
s[i++] = m % 10 + '0';
m /= 10;
}
s[i] = '\0';
i = i - 1;
while (i >= 0)
{
ss[j++] = s[i--];
}
ss[j] = '\0';
return ss;
}
int main()
{
    char c;
    cin >> c;
    int n;
    cin >> n;
    int cnt = 0;

    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++)
        {
            string s = "";
            s+=to_String(i);
            s += "*";
            s+=to_String(j);
            s += "=";
            s+=to_String(j*i);
            s += ",";

            for (int i = 0; i < s.size(); i++)
            {
                if (s[i] == c) cnt++;
            }
        }
    cout << cnt;
    return 0;

}