ZZUIL题解1051-1060(C语言版)

ZZUIL题解1051-1060(C语言版),第1张

ZZUIL题解1051-1060(C语言版)

写在前面的话:
实际上在我看来,前面一些简单的题目也就是锻炼一下写代码的思维和基本的’规矩‘,只要自己有思路都可以按照自己所想的把它用代码实现就可以了;
有疑问的地方请在下方处评论
1051: 平方根的和

1052:数列求和4

1053: 正弦函数

1054: 猴子吃桃

1055: 兔子繁殖问题

1056: 幸运数字

1057: 素数判定

1058:求解不等式

1059: 最高分

1060: 逆序数字

1051:平方根的和 题目描述 数列的定义如下: 数列的第一项为item,以后各项为前一项的平方根,求数列的前n项的和。

输入
由两个整数item(item<10000)和n(n<1000)组成,item和n的含义如前所述。
输出
输出该数列的和,占一行,要求精度保留2位小数。
样例输入 Copy
84 4
样例输出 Copy
97.93
解题思路:
利用循环每计算一次平方根就把该数值累加,累加n次后就是所求的结果;

AC代码:

#include
#include
int main(){
    int i,n;
    double result=0,item; 
    scanf("%lf %d", &item,&n);
    for(i=1; i<=n; i++){
        result+=item;
        item=sqrt(1.0*item);
    }
    printf("%.2fn", result);
    return 0;
}
1052:数列求和4 题目描述 输入n和a,求a+aa+aaa+…aa…a(n个a),如当n=3,a=2时,2+22+222的结果为246

输入
包含两个整数,n和a,含义如上述,你可以假定n和a都是小于10的非负整数
输出
输出前n项和,单独占一行
样例输入 Copy
3 2
样例输出 Copy
246
解题思路:
由于数值比较小所以可以采用双重循环,第一重 *** 控需要累加的次数,第二重计算每一次需要累加的数值,n次累加之后就是所求结果;

AC代码:

#include
int main(){
    int i,n,result=0,item,item1; 
    scanf("%d %d",&n,&item);
    while(n--){
        item1=item;
        for(i=1; i<=n+1; i++){
            result+=item1;
            item1*=10;
        }
    }
    printf("%dn", result);
    return 0;
}
1053:正弦函数 题目描述


输入x,计算上面公式的前10项和。
输入
输入一个实数x。
输出
输出一个实数,即数列的前10项和,结果保留3位小数。
样例输入 Copy
1
样例输出 Copy
0.841
解题思路:
分子分母分开计算,计算分母的时候需要注意不是按照1,2,3,4,5,,,来算的,是计算奇数的阶乘,因此需要有两个变量:一个变量y计算上次计算的结果,一个变量w计算当前应该再累乘的两个数值
对于y=y*(++w)*(++w);
例如在计算3!时y=y(数值为1)乘以(++w)这时w数值为2再乘以(++w)这时候w经过两次的++就变为3了
对于W++;表示w=w+1;
++W;同样表示w=w+1;

这个题比较麻烦最好自己走一遍,计算一下
AC代码:

#include
int main(){
    int i;
    double x=1.0,result=0.0,y=1,w=1;//y,w分母变量需要 
    scanf("%lf",&x);
    float item=x,z=x;
    for(i=1; i<=10; i++){
        if(i%2==1)
            result+=item;
        else
            result-=item;
        z=z*x*x;//计算分子 
        y=y*(++w)*(++w);//计算分母 
        item=z/y;
    }
    printf("%.3fn",result);
    return 0;
}
1054:猴子吃桃 题目描述 悟空第一天摘下桃子若干,当即吃掉一半,还不过瘾,又多吃一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢?

输入
输入一个数n(1<=n<=30)。
输出
输出第一天的桃子个数。
样例输入 Copy
3
样例输出 Copy
10
解题思路:
采用逆向思维;

n天桃子个数为1个,每天吃的桃子个数是剩下的1半另外再加1个,所以第n天的桃子加上1乘以2就是n-1天没吃之前桃子的数目(也就是第n-1天猴子所拥有的桃子数目),继续往前递推n-2次之后就是第一天的桃子树目

例如:
3天后剩下1个,那末第2天桃子的个数就是(1+1
)乘以2就是4,再往前递推n-2也就是1个就可以得出所求结果(4+1)乘以2等于10
这个题也需要纯手工模拟一边即可
AC代码:

#include
int main()
{
    int i,x,n;
    scanf("%d",&n);
    x=1;//剩余桃子是1
    for(i=1;i 
1055:兔子繁殖问题 题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。按此规律,假设没有兔子死亡,第一个月有一对刚出生的小兔子,问第n个月有多少对兔子? 

输入
输入月数n(1<=n<=44)。
输出
输出第n个月有多少对兔子。
样例输入 Copy
3
样例输出 Copy
2
解题思路:
也是模拟题,手工计算一边不难发现每天所拥有的兔子对的数量是前两天所拥有的兔子对数量之和;

AC代码:

#include
int main(){
    int i,day,result,a1=1,a2=1;
    scanf("%d", &day);
    if(day==1||day==2)
        result=1;
    else{
        for(i=3; i<=day; i++){
            result=a1+a2;
            a1=a2;
            a2=result;
        }
    }
    printf("%dn",result);
    return 0;
}
1056:幸运数字 题目描述 小明对某些数字有偏爱,例如,他喜欢7的倍数,而不喜欢4的倍数,如果一个整数是7的倍数,而不是4的倍数,小明会认为这个数字是他的幸运数字。现在给定两个整数m和n,请你帮小明找m到n范围内的最大的幸运数字。如果m到n范围内没有幸运数字,则输出“no”

输入
两个正整数m和n(m < =n,且均小于10的9次方)
输出
一个整数,即m到n范围内的最大的幸运数字。
样例输入 Copy
90 100
样例输出 Copy
98
解题思路:
注意如果正着计算的话可能会超时,那末我们还不如逆着来,反正要找的也是最大值,索性从最后一个开始找,那末第一个找到的肯定是最大的;

AC代码:

#include
int main(){
    int i,m,n,result=0;
    scanf("%d %d", &m,&n);
    for(i=n; i>=m; i--){
        if(i%7==0&&i%4!=0){
            result=i;
            break;
        }
    }
    if(result==0)
    printf("non");
    else
    printf("%dn",result);
    return 0;
}
1057:素数判定 题目描述 输入一个正整数n,判断n是否是素数,若n是素数,输出”Yes”,否则输出”No”。 注意:1不是素数。

输入
输入一个正整数n(n<=1000)
输出
如果n是素数输出"Yes",否则输出"No"。输出占一行。
样例输入 Copy
2
样例输出 Copy
Yes
提示
注意:1不是素数。
注意:1不是素数。
注意:1不是素数。
解题思路:
这个题目只需要了解素数判断的方法就不难做出来,所谓的素数就是说除了本身和1没有其他的因子,
所以我们就从2开始判断(1是每一个数的因子),判断到根号n就可以了,一个数有因子肯定是成对出现,第一个在1——根号n,第二个在根号n-——n之间,所以只需要判断前半部分就可以了

AC代码:

#include
#include
int main(){
    int i,n,k,flag=0;
    scanf("%d", &n);
    k=(int)sqrt(n);
    for(i=2; i<=k; i++){
        if(n%i==0){
            flag=1;
            break;
        }
    }
    if(flag==1||n==1)
    printf("Non");
    else
    printf("Yesn");
    return 0;
}
1058:求解不等式 题目描述 已知不等式 1!+2!+3!+...+m!‹n,请编程对用户指定的n值计算并输出满足该不等式的m的整数解。

输入
输入一个整数n,n为int范围内的正整型。
输出
输出m的取值范围,具体格式见输出样例。
样例输入 Copy
2000000000
样例输出 Copy
m<=12
提示
注意计算过程中的类型溢出问题
解题思路:
防止溢出需要设置变量为long long型,遇到第一个大于n的就break,跳出循环输出m-1,(题目要的是小于n,)

AC代码:

#include
#include
int main(){
    long long i,n,m,item=1,total=0;
    scanf("%lld", &n);
    for(i=1; i<=30; i++){
        item*=i;
        total+=item;
        if(total>=n)
            break;  
    }
    printf("m<=%lldn", i-1);
    return 0;
}
1059:最高分 题目描述 输入一批学生的成绩(整数),输出最高分。

输入
输入包含多个非负整数和一个负整数。该负数不作为有效成绩,只表示输入结束。
输出
输出一个整数,即最高分。单独占一行。
样例输入 Copy
7 6 5 9 2 -1
样例输出 Copy
9
解题思路:
利用一个循环判断一下就完事了,此题比较简单,注意下如何处理输入结束

AC代码:

#include
#include
int main(){
    int i,n,max;
    scanf("%d", &n);
    max=n;
    while(scanf("%d", &n)!=EOF){
        if(n==-1)
        break;
        if(n>max)
        max=n;
    }
    printf("%dn", max);
    return 0;
}
1060:逆序数字 题目描述 输入一个正整数,将其逆序输出,每个数字后有一个空格。

输入
输入一个正整数n,你可以假设n在int范围内
输出
将n按其逆序输出,每个数字后有一个空格,输出占一行。例如,输入12354,输出4 5 3 2 1
样例输入 Copy
12354
样例输出 Copy
4 5 3 2 1
提示
整数n对10取模可得到个位上的数字,而利用整数商是整数这一特点,整数n除以10的商正好“扔掉”了个位上的数字
解题思路:
逆着输出可以采用遇到当前数值直接对10取余数,输出余数后直接除以10,为下一次计算个位上的数提供方便,按照上办法执行到最后即可,手工模拟一边也可以轻松得出结论;

AC代码:

#include
#include
int main(){
    int i,n,len;
    scanf("%d", &n);
    len=(int)log10(n)+1;
    for(i=1; i<=len; i++){
        printf("%d ", n%10);
        n/=10;
    }
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存