编程从键盘输入三个整数其中最大得数_2020第六届编程算法挑战赛解题思路

1: 输入一个字符,如果它是数字输出 “It's numbers”,或者它是英语字母输出“It's a letter”,两者都不是输出“Other characters”。

输入一个字符

输出结果

a

It's a letter

4

It's numbers

$

Other characters

代码:

#include

int main(int argc, char *argv[]) {

       char a;                 输入字符用char

       scanf("%c",&a);              &取地址确定位置

       if(a>='0'&&a<='9')            if语句

       printf("It's numbers\n");                 输出

       else if((a>='a'&&a<='z')||(a>='A'&&a<='Z'))           否则

       printf("It's a letter\n");                输出

       else

       printf("Other characters\n");

       return 0;

}

解题思路:用if语句,判断输入的字符是数字还是字母,可以用字母ASCII码确定if语句中哪些是字母,然后判断,最后输出结果。

2:n的阶乘

输入一个数字正整数n 请求n出的阶乘 n!:

输入 2

输出 2

输入 3

输出 6

5

120

10

3,628,800

12

479,001,600

代码:

#include

#include

int main()

{

    int n,i,s=1;               输入正整数

    scanf("%d",&n);           &取地址

    for(i=1;i<=n;)              for循环进行判定

    {

        s=s*i;               s=s*i

        i++;                i重新赋值循环

    }

    printf("%d",s);                   输出结果

    return 0;

}

解题思路:输入一个正整数,用for循环求n的阶乘。

3:数据逆序显示

输入一个任意长度的正整数,将该数逆序输出。如,输入正数237,则逆序显示的结果为732。如输入230,则逆序显示的结果为32。

Input

输入一个正整数

Output

该数的逆序显示结果(数字最前面的0不显示,如340反转后。要求输出为43,而不是043)

Sample Input

123

Sample Output

321

代码:

#include

int main(int argc, char *argv[]) {              定义函数

       int n,b=0;

       scanf("%d",&n);                 取地址

       while(n)

       {                                    while语句

              if(n%10==0&&b)                    嵌套if语句

              printf("0");                       输出

              else                                 否则

              if(n%10>0&&n%10<=9)                  if语句

              {

                     printf("%d",n%10);                   输出

                     b+=1;                                循环,b=b+1

              }

              n/=10;                  n=n/10

       }

       return 0;

}

解题思路:可以通过将题目中三位数分别定义,然后各个数进行反转赋值,将个位数于百位数进行交换,十位数不变,最终求出结果,也可有别的解法。

4: 查找数

题目描述

有5个整型数据存储在数组中,再输入一个数值key,删除数组中第1个等于key的元素,并将剩余的4个数据输出。如果key不是数组中的元素,则显示not found。

输入

先从键盘输入5个整数,然后再输入一个待删除的数据key。

输出

输出删除后的结果,若不存在则输出not found。输出的最后的数据后面到底有没有空格呢?其实没有。。

样例输入

80 65 93 100 81

93

样例输出

80 65 100 81

代码:

#include

int main(int argc, char *argv[]) {

       int a[5],key,i,have=0;                 //have是key存在的状态 

       for(i=0;i<5;i++)                   for循环语句

       scanf("%d",&a[i]);

       scanf("%d",&key);

       for(i=0;i<5;i++)                  for循环语句嵌套

       {

              if(a[i]==key)                     //查找是否有key值

              {

                     have++;                    have进行循环增加

              }

       }

       if(have)                     if语句判定

       for(i=0;i<5;i++)                    for循环语句

       {

              if(a[i]!=key)

              printf("%d ",a[i]);

       }

       Else                      否则

       printf("not found\n");

       return 0;

}

解题思路:输入五个数,在输入一个待删除的数,最终结果将待删除的数去掉,也就是结果输出除了待删除的那个数之外的其余四个数,用for循环语句和if语句。

5:三个最大和数

输入n个数字,组成一个长度为n的数组。输出数组三个任意元素最大之和结果。

如:

输入:

5

1 5 4 2 3

输出:

12

其中 5 4 3 三个数字之和为最大

10

4 1 8 4 7 3 1 5 4 8

23

20

12 45 78 1 23 45 78 12 4 1 23 45 5 65 12 78 41 21 45 45

234

代码:

#include 
int main(int argc, char *argv[]) {
    int n,i,j,k;
    scanf("%d",&n);
    int a[n],max=0;
    for(i=0;i     scanf("%d",&a[i]);
    for(i=0;i     for(j=i+1;j     for(k=j+1;k     {
        if(max         max=a[i]+a[j]+a[k]; 
    }
    printf("%d",max);
    return 0;
}

解题思路:运用一维数组,定义常量用for循环进行比较,最后得到最大值

6:数学函数

输入一个数字n,将n导入下面这个函数,请输出这个函数的结果。

函数:

         |  f(n)=f(n-1)+2 (n%2=0)

f(n)={   f(1)=1(n=1)

         |  f(n)=f(n-1)*2  (n%2=1&&n>1)

输入数字n

输出函数f(n)的结果

代码:

#include

int fun(int n)              定义新函数

{

       if(n==1)               根据题目

       return 1;

       if(n%2==0)

       return fun(n-1)+2; //情况1

       else

       return fun(n-1)*2;  //情况2

}

int main(int argc, char *argv[]) {                    运行定义函数

       int n;             

       scanf("%d",&n);

       printf("%d",fun(n));                     输出函数结果

       return 0;

}

解题思路:输入一个数字n,将n导入新定义函数,定义新函数输出最终结果。

7:  2进制转16进制

2进制转16进制是一个常见的进制转化过程 9以后的数字分别用 a b c... 代替 您能实现这个功能嘛

提示 答案输出字符型即可

111111

3f

代码:

#include

int main()

{

       long long bin,n=0,ct=1;

       scanf("%lld",&bin);//输入一个二进制数

       while(bin)

       {

              if(bin%10==1)//如果二进制数最后一位为1

              n+=(ct);//①

              ct*=2;//②这两句是把二进制每一位拆开,转成10进制

              bin/=10;

       }

       char a[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

       char b[1000],t=0;

       while(n)//将转成10进制的二进制,在提前设置好的十六进制数组里找到对应数字

       {

              b[t++]=a[n%16];//将提取的十六进制数放到一个新数组里

              n/=16;

       }

       int i;

       for(i=t-1;i>=0;i--)

       printf("%c",b[i]);//输出数组

    return 0;

}

解题思路:用一维数组和定义字符常量,用while循环进行进制转换,得到结果'

8:核桃的数量

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

1. 各组的核桃数量必须相同

2. 各组内必须能平分核桃(当然是不能打碎的)

3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)

输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30)

输出一个正整数,表示每袋核桃的数量。

2 4 5

20

#include

int fun(int a,int b)//先定义任意函数确定关系

{

       int c;

       int d=a,f=b;

       do//do while语句先确定c与a. b的关系

       {

              c=a%b;

              if(c==0)

              {

                     break;

              }     

              a=b;

              b=c;

       }while(1);

       //cout << b << endl;

       return d*f/b;

}

int main(int argc, char *argv[]) { //定义main函数输出变量

       int a,b,c;

       scanf("%d%d%d",&a,&b,&c);

       printf("%d",fun(fun(a,b),c));

       return 0;

}

解题思路:这题要运用主函数和任意函数以及循环语句,根据要求,输出结果

9:求和

请输入一个长度为n的数组a[n] 并输入整数sum,请输出满足a[x]+a[y]==sum 的a[x],a[y]值 用逗号隔开(英文),若不存在,则输出no solution

#include

main()

{

    int n;

    int a[1000];//运用一维数组进行求和,由于数组长度未知,定义随机

    int i,j;

    int sum;

    int count=0;

    scanf("%d",&n);

    for(i=0; i

        scanf("%d",&a[i]);

    scanf("%d",&sum);

    for(i=0; i

        for(j=1+i; j

            if(a[i]+a[j]==sum)

            {

                printf("%d,%d\n",a[i],a[j]);

                count++;

            }

    if(count==0)

        printf("no solution");

}

解题思路:一个一般的一维数组求和,按照标准步骤一点点得到最后结果

J10:猴子过独木桥

从前有一根很长很长很长很长很长很长很长。。。。。。很长的独木桥,大概有L米那么长。

独木桥上有n只猴子,由于独木桥太细两只猴子相遇后只能往反方向爬去。

这些猴子以每秒一米的速度匀速爬行。我们当前只知道猴子距离独木桥左边的距离为xi,

但是不知道各个猴子当前的朝向。请计算出所有猴子走出独木桥所需要的最长时间和最短时间

样例输入

3

2 6 7

10

样例输出

4 8

#include

main()

{

    int L;//独木桥长度

    int n;//猴子数量

    int x[1000];//保存猴子的位置

    int min = 0;//最短时间

    int max = 0;//最长时间

    int i;

    scanf("%d",&n);//输入猴子数量

    for(i=0; i

        scanf("%d",&x[i]);//依次输入猴子的位置

    scanf("%d",&L);//输入杆子的长度

    for(i=0; i

    {

        if(x[i]>L-x[i])//如果更靠近杆子右边的话

        {

            if(min

                min = L-x[i];//最小值为猴子同向的时候杆子右边的距离

        }

        else if(min

            min = x[i];

    }

    for(i=0; i

    {

        if(x[i]

        {

            if(max

                max = L-x[i];//则选择杆子右边

        }

        else if(max

            max = x[i];//

    }

    printf("%d %d",min,max);

}

                          讲解人:

丰佳成

梁玉娇

刘道庆

4c4d9a1da243530356c7e39caae2af4e.png

扫码加入我们哦~~~~

轻触点击,等你留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值