
🌈这里是say-fall分享,感兴趣欢迎三连与评论区留言
🔥专栏:《C语言从零开始到精通》《C语言编程实战》《数据结构与算法》
《小游戏与项目》
💪格言:做好你自己,你才能吸引更多人,并与他们共赢,这才是你最好的成长方式。
前言:
本系列博客将会更新一些每日的刷题代码
文章目录
- 前言:
- 正文:
-
- [1. 喝汽水问题](#1. 喝汽水问题)
- [2. 打印菱形](#2. 打印菱形)
- [3. 水仙花数](#3. 水仙花数)
- [4. 计算求和](#4. 计算求和)
- [5. 斐波那契数](#5. 斐波那契数)
- [6. 递归实现n的k次方](#6. 递归实现n的k次方)
- [7. 计算一个数的每位之和(递归实现)](#7. 计算一个数的每位之和(递归实现))
正文:
1. 喝汽水问题
- 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)
c
#include<stdio.h>
int main()
{
int money = 20;
int b_cap = 0;
int count = 0;
while (money)
{
//方法一:喝一次汽水判断一次
//喝汽水
money--;
count++;
b_cap++;
//判断能不能换汽水喝
if (b_cap >= 2)
{
b_cap -= 2;
count++;
b_cap++;
}
}
printf("%d ", count);
//方法二:全部喝完统一判断
//int money = 20;
//int b_cap = 0;
//int count = 0;
////喝完汽水
//count = money;
//b_cap = money;
////换汽水
//while (b_cap >= 2)
//{
// int exchange = b_cap / 2;
// count += exchange;
// b_cap =exchange + (b_cap % 2);
//}
//printf("%d ", count);
return 0;
}
2. 打印菱形
- 打印如图菱形

c
#include <stdio.h>
int main()
{
int x = 6;
int y = 1;
while (x > 0)
{
for (int i = 0;i < x;i++)
printf(" ");
for (int j = 0;j < y;j++)
printf("*");
for (int i = 0;i < x;i++)
printf(" ");
x--;
y += 2;
printf("\n");
}
while (x <= 6)
{
for (int i = 0;i < x;i++)
printf(" ");
for (int j = 0;j < y;j++)
printf("*");
for (int i = 0;i < x;i++)
printf(" ");
x++;
y -= 2;
printf("\n");
}
return 0;
}
3. 水仙花数
- 求出0~100000之间的所有"水仙花数"并输出。
"水仙花数"是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=13+53+3^3,则153是一个"水仙花数"。
c
//水仙花数
#include <stdio.h>
#include <math.h>
int main()
{
for (int z = 1;z <= 100000;z++)
{
int x = z;
int sum = 0;
int i = 0;
int num = 0;
int n = 0;
int rem[7] = { 0 };
do
{
rem[i] = x % 10;
num = x / 10;
x = x / 10;
n++;
i++;
} while (num != 0);
for (i = 0;i < n;i++)
{
int power = 1;
for (int j = 0;j < n;j++)
{
power *= rem[i];
}
sum += power;
}
if (sum == z)
printf("%d ", z);
}
return 0;
}
4. 计算求和
- 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2 + 22 + 222 + 2222 + 22222
c
//计算求和
//方法一:
#include<stdio.h>
int main()
{
int a = 0;
printf("请输入数字a,将得到:Sn(Sn=a+aa+aaa+aaaa+aaaaa)\n");
scanf("%d",&a);
int x = 5;
int y = 0;
int sum = 0;
while (x >= 1)
{
int power = 1;
y = 5 - x;
for (int i = 0;i < y; i++)
{
power *= 10;
}
sum += (x * a * power);
x--;
}
printf("%d\n", sum);
return 0;
}
//方法二:
#include<stdio.h>
int main()
{
int a = 0;
printf("请输入数字a,将得到:Sn(Sn=a+aa+aaa+aaaa+aaaaa)\n");
scanf("%d", &a);
int sum = 0;
int current = 0;
for (int i = 0;i<5;i++)
{
current = 10 * current + a;
sum += current;
}
printf("%d\n", sum);
return 0;
}
5. 斐波那契数
- 计算第n个斐波那契数

c
//斐波那契数
//递归
#include<stdio.h>
int fib_recu(int x)
{
if (x == 1 || x == 2)
{
return 1;
}
else if (x > 2)
{
return fib_recu(x - 1) + fib_recu(x - 2);
}
else
{
printf("输入错误\n");
return -1;
}
}
//迭代
int fib_iter(int x)
{
if (x == 1 || x == 2)
{
return 1;
}
else if (x >= 3)
{
int a = 1;
int b = 1;
int c = 1;
for (int i = 3;i <= x ;i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
else
{
printf("重新输入");
return -1;
}
}
int main()
{
int x = 0;
printf("您要求第几个斐波那契数:");
int count = scanf("%d", &x);
if (count == 1)
{
printf("%d\n", fib_iter(x));
}
return 0;
}
6. 递归实现n的k次方
- 编写一个函数实现n的k次方,使用递归实现。
c
#include <stdio.h>
//编写一个函数实现n的k次方,使用递归实现。
int power(int n,int k)
{
int ret = n;
if (k == 0)
{
return 1;
}
else if (k >= 1)
{
ret *= power(n, k - 1);
return ret;
}
else
{
printf("输入错误,不支持负指数");
return -1;
}
}
int main()
{
int n = 0;
int k = 0;
printf("输入n,k,计算n的k次方:");
int count = scanf("%d %d", &n,&k);
if (count == 2)
{
printf("%d\n", power(n,k));
}
return 0;
}
7. 计算一个数的每位之和(递归实现)

c
//计算一个数的每位之和(递归实现)
#include<stdio.h>
int DigitSum(int n)
{
if (n > 9)
{
return n % 10 + DigitSum(n / 10);
}
else
{
return n;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
printf("%d\n",DigitSum(n));
/*循环实现*/
int sum = 0;
if (n>=10)
{
while (n > 0)
{
int rem = n % 10;
sum += rem;
n = n / 10;
}
printf("%d\n", sum);
}
else
{
printf("%d\n", n);
}
return 0;
}
- 本节完...