实验一

一. 7-1 3人分糖果

幼儿园里,有3个小朋友编号分别是1、2、3,他们按自己的编号顺序围坐在一张圆桌旁,每个小朋友的面前分别有8、9、10颗糖果。现在做一个分糖果游戏,从1号小朋友开始,将自己的糖果平均分成三份(如果有多余的糖果,则自己立刻吃掉),自己留一份,其余两份分给相邻座位的两个小朋友。接着,2号、3号小朋友也同样这么做。请问一轮后,每个小朋友面前分别有多少糖果?

输入格式:

本题目没有输入。

输出格式:

在一行内显示以下结果。注意行末除了换行符不能有任何多余字符。

10 8 5

输入样例:

本题目没有输入。

输出样例:

10 8 5

参考答案:

#include<iostream>
using namespace std;
int main(){
   cout<<10<<" "<<8<<" "<<5;
    return 0;
}

二. 什么是机器学习

ml.jpg

什么是机器学习?上图展示了一段面试官与“机器学习程序”的对话:

面试官:9 + 10 等于多少?
答:3
面试官:差远了,是19。
答:16
面试官:错了,是19。
答:18
面试官:不,是19。
答:19

本题就请你模仿这个“机器学习程序”的行为。

输入格式:

输入在一行中给出两个整数,绝对值都不超过 100,中间用一个空格分开,分别表示面试官给出的两个数字 A 和 B。

输出格式:

要求你输出 4 行,每行一个数字。第 1 行比正确结果少 16,第 2 行少 3,第 3 行少 1,最后一行才输出 A+B 的正确结果。

输入样例:

9 10

输出样例:

3
16
18
19

参考答案:

#include<iostream>
using namespace std;
int main(){
   int a,b;
    cin>>a>>b;
    int sum = a+b;
    cout<<sum-16<<endl;
    cout<<sum-3<<endl;
    cout<<sum-1<<endl;
    cout<<sum;
    return 0;
}

三. 7-3 鸡兔同笼

《孙子算经》中记载了一个有趣的问题:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?”根据上述描述可列出如下形式的二元一次方程组。
{x+y=352x+4y=94​
那么求解鸡兔同笼问题就转化成了二元一次方程组求解问题。本题要求编写程序对任意给定的头数和足数判断鸡和兔各有多少。

输入格式:

在一行中给出任意两个非负整数,整数之间用空格分开,第一个整数表示头数,第二个整数表示足数。

输出格式:

在一行中按照chickens = mm; rabbits = nn的格式输出解,如果无解则输出No solution! 。其中mmnn都是非负整数。

输入样例1:

35 94

输出样例1:

chickens = 23; rabbits = 12

输入样例2:

94 35

输出样例1:

No solution!

参考答案

#include<iostream>
using namespace std;
int main(){
   int head,foots;
   cin>>head>>foots;
   if((foots-head*2)%2!=0 || (head==0&&foots!=0)||(foots==0&&head!=0)||head<foots/4){
       cout<<"No solution!";
       return 0;
   }
   int rabbits = (foots-head*2)/2;
   int chickens = head - rabbits;
    cout<<"chickens = "<<chickens<<"; rabbits = "<<rabbits;
    return 0;
}

四. 7-4 位数和

输入一个4位整数,求各个位上的数字之和。

输入格式:

一个四位数的整数。

输出格式:

一个整数,表示各位之和。

输入样例:

1234

输出样例:

10

样例解释:1+2+3+4=10

参考答案

#include<iostream>
using namespace std;
int main(){
   int num;
    cin>>num;
    int sum = 0;
    while(num>0){
        int left = num%10;
        num/=10;
        sum+=left;
    }
    cout<<sum;
    return 0;
}

五. 7-5 逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

参考答案

#include<iostream>
using namespace std;
int main(){
    int num;
    cin>>num;
    int sum = 0;
    while(num>0){
        int left = num%10;
        sum = sum*10+left;
        num/=10;
    }
    cout<<sum;
    return 0;
}

六. 7-6 算时间

夏老板在跑步机上锻炼身体。他低头一看,跑步机上记录的跑步时间是以秒为单位,屏幕上显示夏老板跑步的总时间是x秒。
夏老板想用“时分秒”的形式来表示跑步时间,他向你提问:x秒是多少个小时 多少分钟 多少秒?

输入格式:

一行,一个整数x(0≤x≤2∗1012)。

输出格式:

一行,三个整数a,b,c分别表示时分秒,其间以":"作为间隔。

输入样例1:

8000

输出样例1:

2:13:20

输入样例2:

1234

输出样例2:

0:20:34

样例1说明:8000秒等于2小时13分20秒。

参考答案

#include<iostream>
using namespace std;
int main(){
   long long time;
   cin>>time;
    long long hour = time/3600;
    time -=hour*3600;
    long long minite = time/60;
    time-=minite*60;
    long long second = time;
    cout<<hour<<":"<<minite<<":"<<second;
    return 0;
}
最后修改:2025 年 11 月 14 日
如果觉得我的文章对你有用,请随意赞赏