16.计算短信费用
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int arr[20];
double count=0;
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(int i=0;i<n;i++)
{
if(arr[i]<=60)
count +=0.1;
else
count +=0.2;
}
printf("%.1lf",count);
return 0;
}
17.编写函数不允许创建临时变量,求字符串的长度
题目分析:不允许创建临时变量,只能使用函数递归。
#incude <stdio.h>
int Strlen(const char*str)
{
if(*str == '\0')
return 0;
else
return 1+Strlen(str+1);
}
int main()
{
char *p = "abcdef";
int len = Strlen(p);
printf("%d\n", len);
return 0;
}
18.汉诺塔问题
汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆盘。梵天命令一个叫婆罗门的门徒将所有的圆盘移动到另一个柱子上,移动过程中必须遵守以下规则:
● 每次只能移动柱子最顶端的一个圆盘;
● 每个柱子上,小圆盘永远要位于大圆盘之上;
#include <stdio.h>
void hanoi(int num, char sou, char tar,char aux) {
//统计移动次数
static int i = 1;
//如果圆盘数量仅有 1 个,则直接从起始柱移动到目标柱
if (num == 1) {
printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
i++;
}
else {
//递归调用 hanoi() 函数,将 num-1 个圆盘从起始柱移动到辅助柱上
hanoi(num - 1, sou, aux, tar);
//将起始柱上剩余的最后一个大圆盘移动到目标柱上
printf("第%d次:从 %c 移动至 %c\n", i, sou, tar);
i++;
//递归调用 hanoi() 函数,将辅助柱上的 num-1 圆盘移动到目标柱上
hanoi(num - 1, aux, tar, sou);
}
}
19.走台阶问题
题目分析:第18题、第19题是经典的斐波那契系题目。
#include <stdio.h>
int main()
{
int arr[31]={0,1,2,3},n,i;
scanf("%d",&n);
for(i = 4;i<=n;i++)
{
arr[i] = arr[i-1] + arr[i-2];
}
printf("%d",arr[n]);
return 0;
}
20.兔子的序列
#include <stdio.h>
#include <math.h>
int main()
{
int max = -1, len, n;
scanf("%d", &len);
for(int i = 0; i < len; i++)
{
scanf("%d", &n);
max = (pow((int)sqrt(n), 2) != n) && max < n? n : max;
}
printf("%d", max);
return 0;
}