1.回文对称数
描述
今天牛牛学到了回文串,他想在数字里面找回文,即回文数,回文数是正着读与倒着读都一样的数,比如1221,343是回文数,433不是回文数。请输出不超过n的回文数。
输入描述:
输入一个整数n(1 <= n <= 100000)
输出描述:
从1开始按从小到大的顺序输出所有回文数
示例1
输入:
10
输出:
1 2 3 4 5 6 7 8 9
解题思路:
这里我们只用看倒着输出的值和原本的值一不一样;
假设我们倒着打印433这个数:
433%10.......得到它的最低位;
433/10.......得到43;
往复循环;
我们这样只能得到最低位,所以我们需要*10;
#include <stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int i=0;
for(i=1;i<=n;i++)
{
int m=i;
int j=0;
int sum=0;
while(m)
{
j=j*10+m%10;
m/=10;
}
if(j==i)
{
printf("%d\n",i);
}
}
return 0;
}
2.最大公约数和最小公倍数
题目描述
输入两个正整数m和n,求其最大公约数和最小公倍数。
输入格式
两个整数
输出格式
最大公约数,最小公倍数
样例输入
5 7
样例输出
1 35
解题思路:
我们这里可以用辗转相除法去求最大公约数;
首先就得比较2数的大小,大的放在前面,小的放后面;
最小公倍数可以用公式求,2数的乘积除以它们的最大公约数即可;
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int n1 = n;
int m1 = m;
int i = 0;
int j = 0;
int num = 0;
while (1)
{
if (n < m)
{
i = n;
n = m;
m = i;
}
if (n % m == 0)
{
num = m;
printf("%d", num);
break;
}
else
{
j = n % m;
n = m;
m = j;
}
}
int sum = (n1 * m1) / num;
printf("\n%d", sum);
return 0;
}
3.字符串分类统计
题目描述
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
输入格式
一行字符,长度不超过200
输出格式
统计值
样例输入
aklsjflj123 sadf918u324 asdf91u32oasdf/.';123
样例输出
23 16 2 4
解题思路:
创建一个字符数组存储字符串;用数组下标访问数组每个元素;对照ascll码表来找出对应的符号;
#include <stdio.h>
#include <string.h>
int
main(void)
{
char str[200];//声明一个数组用于存储输入的字符
int letter = 0, number = 0, space = 0, other, n;
gets(str); //获取输入并存储到数组里,gets会把输入的换行符\n丢弃
n = strlen (str); //获取输入的字符长度
for(int i = 0; i < n; i++)//for循环可以声明变量同时初始化,多个声明用 , 逗号隔开
{
if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
letter += 1;
if (str[i] == ' ')
space += 1;
if (str[i] >= '0' && str[i] <= '9')
number += 1;
}
other = n - space - number - letter; //把整个字符长度减去字母数、空格、数字得出其他字符的数量
printf("%d %d %d %d", letter, number, space, other);
return 0;
}
4.阶乘求和
题目描述
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
输入格式
n
输出格式
Sn的值
样例输入
5
样例输出
153
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
long long num = 1;
long long sum = 0;
for (i = 1; i <= n; i++)
{
num = num * i;
sum += num;
}
printf("%lld", sum);
return 0;
}
5.Sn的公式求和
题目描述
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
输入格式
n
输出格式
Sn的值
样例输入
5
样例输出
24690
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
long long Sn=0;
int j = 1;
int num = 2;
for (i = 1; i <= n; i++)
{
if (i == 2)
{
j *= 10;
}
num = num * j;
if (i >= 2)
{
num += 2;
}
Sn += num;
}
printf("%lld", Sn);
return 0;
}
6.有规律的数列求和
题目描述
有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
输入格式
N
输出格式
数列前N项和
样例输入
10
样例输出
16.48
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
float N = 0;
float l = 2.0, j = 1.0;
float sum = 0;
for (i = 1; i <= n; i++)
{
float m = 0;
if (i >= 2)
{
m = l;
l += j;
j = m;
}
N = l / j;
sum += N;
}
printf("%.2f", sum);
return 0;
}