xdoj习题 斐波纳契数列,57Fibonacci数列,数组元素平移,单词排序,字符串复制


斐波纳契数列


问题描述    
已知一个斐波纳契数列中的数字依次为1, 1, 2, 3, 5, 8, 13, 21, 34, 55 … 。请判断该数列中第n个数字(n从1开始计数)是不是素数。
输入说明    
输入一个整数n(1<n<=40)。
输出说明    
判断斐波纳契数列中的第n个数字是不是素数,如果是输出yes,否则输出该数字。
输入样例
样例1输入    
6
样例2输入
4
输出样例    
样例1输出
8
样例2输出
yes

#include <stdio.h>
int is_prime(int x)
{
    int i=0;
    if(x==2)
    return 1;
    else
    {
        for(i=2;i<x/2;i++)
        {
            if(x%i==0)
            return 0;
        }
    }
    return 1;
}
int main()
{
    int i=0,n=0,f1=1,f2=1,f3=0,m=0;
    scanf("%d",&n);
    if(n==2)
    {
        m=1;
    }
    if(n>2)
    {
        for(i=2;i<n;i++)
        {
            f3=f1+f2;
            f1=f2;
            f2=f3;
        }
        m=f3;
    }
    if(is_prime(m)==1)
    {
        printf("yes");
    }
    else
    {
        printf("%d",m);
    }
    return 0;
}


Fibonacci数列


问题描述    
有一种形式的Fibonacci数列定义如下:
F(0)=7 
F(1)=11
F(n)=F(n-1)+F(n-2)(n>=2)
按以下声明写一个函数fib
int fib(int n);
fib函数用来计算参数n对应的F(n)。
fib(n)的返回值是F(n)
输入说明    
函数参数为一个整数n(0<=n<40)。
输出说明    
函数返回值为整数,表示n对应的F(n)值。
输入
2
输出
18
#include <stdio.h>
int fib(int x)
{
    int i=0,f1=7,f2=11,f3=0;
    if(x==0)
    return f1;
    else if(x==1)
    return f2;
    else
    {
        for(i=1;i<x;i++)
        {
            f3=f1+f2;
            f1=f2;
            f2=f3;
        }
        return f3;
    }
}
int main()
{
    int n=0;
    scanf("%d",&n);
    printf("%d",fib(n));
    return 0;
}

数组元素平移


已知数组array[10]={1,2,3,4,5,6,7,8,9,10};要求把下标从0到p(p从键盘输入)的数组元素平移到数组的最后,并输出平移后的数组。

输入格式:输入一个整数p;
输出格式:共一行,输出平移后的数组,数字之间用空格分隔

示例:
输入:3
输出:5 6 7 8 9 10 1 2 3 4

#include <stdio.h>
int main()
{
    int arr[10]={0};
    int i=0,n=0;
    for(i=1;i<=10;i++)
    {
        arr[i-1]=i;
    }
    scanf("%d",&n);
    for(i=n+1;i<10;i++)
    {
        printf("%d ",arr[i]);
    }
    for(i=0;i<=n;i++)
    {
        printf("%d ",arr[i]);
    }    
    return 0;
}


单词排序


题目描述:
定义一个二维字符数组str[10][20],行号表示单词序号,列号表示单词最大长度,
输入一个正整数N(N≤10),表示单词数,
使用函数wd_sort()完成单词的排序,按字母顺序从小到大排列单词
输入描述:
输入一个正整数N和一个二维字符数组str,字母为小写,行号表示单词序号,列号表示单词最大长度。
输出描述:
格式输出:排序后的单词之间用换行分隔。
输入样例:
3
word 
fish 
egg
输出样例:
egg
fish
word
提示:
使用strcmp()、strcpy()和strlen()函数,头文件string.h。

#include <stdio.h>
#include <string.h> 
int main()
{
    int n=0,i=0,j=0;
    scanf("%d",&n);
    char str[10][20];
    char str1[20];
    for(i=0;i<n;i++)
    {
        scanf("%s",&str[i]); 
    }
    //冒泡排序 
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(strcmp(str[j],str[j+1])>0)
            {
                strcpy(str1,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],str1);
            }
            
        }
        
    }
    //输出 
    for(i=0;i<n;i++)
    {
        printf("%s\n",str[i]);
    }
    return 0;
}


字符串复制


问题描述:
有一个字符串,包含n个字符。写一个函数,将此字符中从第m个字符开始的全部字符复制成为另外一个字符。(注意:必须用指针数组处理)
输入样例:
abcdefg
5
输出样例:
efg
输入样例:
qazxsw
8
输出样例:
error

#include <stdio.h>
#include <string.h>
void copy(char* p,char* p1,int x,int y)
{
    int i=0,j=0;
    char t;
    for(i=x-1,j=0;i<y;i++,j++)
    {
        *(p1+j)=*(p+i);
    }
    
}
int main()
{
    char arr[50]={'\0'};
    char arr1[50]={'\0'};
    gets(arr);
    int n=strlen(arr);
    int i=0,m=0;
    scanf("%d",&m);
    if(m<=n)
    {
        copy(arr,arr1,m,n);
        puts(arr1);
    }
    else if(m>n)
    {
        printf("error");
    }
    return 0;
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北の风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值