骰子概率

 

 

参考答案:

#include <bits/stdc++.h>  
#include <algorithm>
#define ll unsigned long long
using namespace std;

ll dp[1005][1005]; //定义数组大小   意义为抛n枚硬币,点数和为x的方案数

int gcd(int a, int b)      //自定义函数:欧几里得辗转相除法求最大公约数
{
  if (b == 0) return a;
  return gcd(b, a%b);
}
int main()
{
  ll n, k, i, j, m;
  cin >> n >> m;
  dp[0][0] = 1;
  for (i = 0; i < n; i++)  //外层循环:i从0到n-1表示抛第i枚硬币
  {
    for (j = 0; j <= i * 6; j++) //中层循环:j从0到i*6(骰子最大值为6,投两枚为2*6即12)
    {
      for (k = 1; k <= 6; k++) dp[i + 1][j + k] += dp[i][j]; //内层循环:k从1到6
    }
  }
  ll ans = 0, temp = 1;
  for (i = m; i <= 6 * n; i++) ans += dp[n][i];
  for (i = 0; i < n; i++) temp *= 6;
  if (ans%temp == 0)   //输出部分利用了最大公约数来输出标准分数,如果是整数则输出整数
  { 
    cout << ans / temp << endl; return 0;
  }
  
  ll t = gcd(ans, temp);
  cout << ans / t << "/" << temp / t << endl;
  system("pause");
  return 0;
}

 

字符串输出数字

 

 

参考答案:

#include<cstdio>
#include<cstring>
#include<cstdlib>
char a[1000];
int main()
 {
 unsigned int i, count = 0;   //定义无符号int值
   gets_s(a);
  for (i = 0; i <= strlen(a) - 1; i++) //计算字符长度
  if (a[i] >= '0'&&a[i] <= '9')
   count++;
  printf("%d", count);
  system("pause");
   return 0;
 }