数字统计
请统计某个给定范围 [L, R] 的所有整数中,数字 2 出现的次数。 比如给定范围 [2, 22],数字 2 在数 2 中出现了 1 次,在数 12 中出现 1 次,在数 20 中出现 1 次,在数 21中出现 1次,在数 22中出现 2次,所以数字 2在该范围内一共出现了 6 次。
输入格式:
输入共 1 行,为两个正整数 L 和 R(1≤L≤R≤10000),之间用一个空格隔开。
输出格式:
输出共 1 行,表示数字 2 出现的次数。
输入样例:
2 22
输出样例:
6
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,ans=0;
scanf("%d%d",&a,&b);
for(int i=a;i<=b;i++){
int c=i;
while(c!=0){
if(c%10==2)ans++;
c/=10;
}
}
printf("%d",ans);
}
h0074. 金币
国王用金币支付他忠诚的骑士。在服役的第一天,骑士会收到一枚金币。在接下来的两天(服务的第二天和第三天)中的每一天,骑士都会收到两个金币。在接下来的三天(服役的第四天、第五天和第六天)的每一天,骑士都会收到三个金币。在接下来的四天(服役的第七天、第八天、第九天和第十天)中的每一天,骑士都会收到四枚金币。这种支付模式将无限期持续:在连续 N 天的每一天收到 N 个金币后,骑士将在接下来的 N+1 天的每一天收到 N+1 个金币,其中 N 是任意正整数。
您的程序将确定在任何给定天数内(从第 1 天开始)支付给骑士的金币总数。
输入格式:
输入包含至少 1 行,但不超过 21 行。输入文件的每一行(除了最后一行)都包含问题的一个测试用例的数据,由一个整数(在 1..10000 范围内)组成,代表天数。输入的结束由包含数字 0 的行表示。
输出格式:
每个测试用例只有一行输出。这一行包含从对应的输入行算起的天数,后跟一个空格和在给定的天数内支付给骑士的金币总数,从第 1 天开始。
输入样例:
23
11
6
7
0
输出样例:
23 105
11 35
6 14
7 18
#include<stdio.h>
int main()
{
int day;
scanf("%d", &day);
while (day != 0)
{
int a = 0, money = 0;
for (int i = 1; a < day; i++)
{
a += i;
for (int j = 1; j <= i && a <= day; j++)
{
money += i;
}
if (a > day)
{
money += (day - (a - i)) * i;
}
}
printf("%d %d\n", day, money);
scanf("%d", &day);
}
return 0;
}
计算区间素数和
杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序,可以计算整数 m 和 n 之间的所有素数之和。
输入格式:
输入两个整数 m,n, 题目不保证 m≤n,但是保证 0≤m≤20000,0≤n≤20000。
输出格式:
输出 m 和 n 之间的所有素数的和。
输入样例01:
在这里给出一组输入。例如:
10 0
输出样例01:
在这里给出相应的输出。例如:
17
输入样例02:
在这里给出一组输入。例如:
100 200
输出样例02:
在这里给出相应的输出。例如:
3167
这道题一共六个样例,做对了5个,满分十分,得了8分。。。
#include <stdio.h>
#include <math.h>
int prime(int p);
int main()
{
int m, n, p, sum;
scanf("%d %d", &m, &n);
if (m > n) {
int t = m;
m = n;
n = t;
}
for (p = m; p <= n; p++) {
if (prime(p) != 0)
sum += p;
}
printf("%d", sum);
return 0;
}
int prime(int p)
{
int ret = 1;
if (p > 1)
{
for (int i = 2; i < p; i++)
{
if (p % i == 0)
{
ret = 0;
break;
}
}
}
else
{
ret = 0;
}
return ret;
}
连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5*6*7
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int num;
scanf("%d",&num);
int start=0,longth=0;
for(int i=2;i<sqrt(num)+1;i++)
{
int sq = i,gs = 0,n = num;
for(;n%sq==0;gs++,sq++)
n = n/sq;
if(gs>longth)
{
start = i;
longth = gs;
}
}
if(longth!=0)
{
printf("%d\n",longth);
for(int i=0;i<longth-1;i++)
printf("%d*",start+i);
printf("%d",start+longth-1);
}
else
printf("1\n%d",num);
return 0;
}
有多少香蕉
以前有这么一个益智游戏,沙滩上有n个猴子和一堆香蕉,晚上有一只猴子偷偷起来把香蕉分成n份,自己拿走了一份,多出来一根,扔进了海里,然后去睡觉了,后面所有的猴子都进行了同样的操作,分成n份,扔掉一根,拿走一份。问最少需要多少香蕉才能让所有猴子都完成该操作。(最后一只猴子扔掉后可以拿走0个,也算是n份均分)给定一个整数m,表示猴子的个数,题目要求输出最初的香蕉数。题目保证有解。
输入格式:
第一行输入n,后面依次输入n个数m。
输出格式:
所有输出在一行内完成,行末不能有多余空格,最后无回车结尾
输入样例:
第一行的2表示有2个m输入。第二行第三行是输入数据
2
2
3
输出样例:
3 25
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,j,k=0;
double xiangjiao;
scanf("%d",&n);
double m[n];
for(i=0;i<n;i++)
scanf("%lf",&m[i]);
for(j=0;j<n;j++){
xiangjiao=pow(m[j],m[j])-m[j]+1;
printf("%.f",xiangjiao);
if (k!=n-1){
printf(" ");k++;}
}
return 0;
}