从坐牢到入门的程序设计(15)
开始时间2023-07-28 10:01:08
结束时间2023-07-28 12:41:42
前言:你怎么知道我边逛新生群边刷题(我还洗了个澡)?
L1-079 天梯赛的善良
一、题目编号及题目说明
二、程序功能测试及说明
这段代码是使用 C++ 编写的一个简单程序,用于统计输入的一组数字中的最小值、最小值出现的次数、最大值以及最大值出现的次数。
三、程序设计思路及结构说明
- 首先,从标准输入中读取一个整数
n
,表示接下来要输入的数字数量。 - 声明一些变量,包括
i
和j
用于循环计数,max
和min
用于存储最大值和最小值,count
和nb
用于存储最大值和最小值的出现次数。 - 使用一个循环
for
来遍历输入的数字。 - 在循环中,首先从输入中读取一个数字并将其存储在变量
a
中。 - 如果
a
等于当前的最大值max
,则将count
加一,表示最大值出现的次数增加。 - 如果
a
等于当前的最小值min
,则将nb
加一,表示最小值出现的次数增加。 - 如果
a
大于当前的最大值max
,则更新max
的值为a
,并重置count
为 1。 - 如果
a
小于当前的最小值min
,则更新min
的值为a
,并重置nb
为 1。 - 循环结束后,通过
printf
函数按照指定格式输出最小值和最小值出现的次数,然后输出最大值和最大值出现的次数。 - 最后返回 0,表示程序执行完毕。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; int i=0,j=0; int max=0,count=0,min=1000000,nb=0; int a; for(i=0;i<n;i++) { cin>>a; if(a==max) { count++; } if(a==min) { nb++; } if(a>max) { max=a; count=1; } if(a<min) { min=a; nb=1; } } printf("%d %d\n",min,nb); printf("%d %d",max,count); return 0; }
五、题目评分
L1-080 乘法口诀数列
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是根据给定的初始两个数字以及生成序列的长度,按照一定的规则生成一个特殊的数字序列,并将序列输出。
三、程序设计思路及结构说明
- 首先,从标准输入中读取三个整数
a
、b
和n
,分别表示序列的初始两个数字和要生成序列的长度。 - 声明一些变量,包括
len
用于记录当前序列的长度,c
是一个数组用于存储生成的数字序列,i
和tmp
用于循环计数和临时变量。 - 将输入的初始两个数字
a
和b
存储到数组c
的前两个位置。 - 使用
printf
函数输出第一个数字a
。 - 使用一个循环
while
来生成剩下的数字序列,直到序列的长度达到n
。 - 在循环中,首先计算当前位置的两个数字相乘得到的结果,并将结果存储到临时变量
tmp
中。 - 如果
tmp
小于 10,则将tmp
直接存储到数组c
的下一个位置,并将i
加一。 - 否则,将
tmp
的十位数存储到数组c
的下一个位置,个位数存储到数组c
的下下个位置,并将i
加二。 - 使用
printf
函数输出当前位置的数字。 - 每次循环结束,将
len
加一。 - 循环结束后,返回 0,表示程序执行完毕。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main() { int a, b, n; int len = 1, c[2005]; int i = 2, tmp=0; cin>>a>>b>>n; c[0] = a; c[1] = b; printf("%d", a); while (len < n){ tmp = c[len] * c[len-1]; if (tmp < 10){ c[i++] = tmp; } else { c[i++] = tmp / 10; c[i++] = tmp % 10; } printf(" %d", c[len]); len++; } return 0; }
五、题目评分
L1-081 今天我要赢
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是输出一句激励的话语以及一个指定的日期信息。
三、程序设计思路及结构说明
- 使用
printf
函数输出字符串 "I'm gonna win! Today!",并在末尾添加换行符\n
。 - 使用
printf
函数输出日期信息 "2022-04-23",并在末尾添加换行符\n
。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main() { printf("I'm gonna win! Today!\n2022-04-23\n"); }
五、题目评分
L1-082 种钻石
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是计算两个浮点数的商,并向下取整输出结果的整数部分。
三、程序设计思路及结构说明
- 声明两个浮点数变量
n
和v
,用于存储输入的数值。 - 使用
cin
从标准输入中读取两个浮点数,并将其分别存储到变量n
和v
中。 - 声明一个浮点数变量
t
,用于存储n
除以v
的结果,并通过floor
函数向下取整。 - 使用
printf
函数格式化输出t
的整数部分,并四舍五入到最接近的整数。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main() { float n,v; cin>>n>>v; float t=floor(n/v); printf("%.0f",t); }
五、题目评分
L1-083 谁能进图书馆
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是对输入的四个整数进行条件判断,并根据不同的情况输出对应的结果。
三、程序设计思路及结构说明
程序逻辑如下:
- 声明四个整数变量
jinru
、peitong
、a1
和a2
,用于存储输入的整数。 - 使用
scanf
函数从标准输入中读取四个整数,并将其分别存储到变量jinru
、peitong
、a1
和a2
中。 - 根据不同的条件判断,使用
printf
函数输出不同的结果。
具体的条件判断逻辑如下:
- 如果
a1
等于a2
,- 如果
a1
小于jinru
,则输出格式化字符串 "%d-N %d-N\nzhang da zai lai ba",其中%d
分别代表a1
和a2
的值。 - 否则,输出格式化字符串 "%d-Y %d-Y\nhuan ying ru guan"。
- 如果
- 如果
a1
大于a2
,- 如果
a2
大于等于jinru
,则输出格式化字符串 "%d-Y %d-Y\nhuan ying ru guan"。 - 如果
a2
小于jinru
且a1
大于等于peitong
,则输出格式化字符串 "%d-Y %d-Y\nqing 1 zhao gu hao 2"。 - 如果
a1
大于等于jinru
且a1
小于peitong
,则输出格式化字符串 "%d-Y %d-N\n1: huan ying ru guan"。 - 否则,输出格式化字符串 "%d-N %d-N\nzhang da zai lai ba"。
- 如果
- 如果
a1
小于a2
,- 如果
a1
大于等于jinru
,则输出格式化字符串 "%d-Y %d-Y\nhuan ying ru guan"。 - 如果
a1
小于jinru
且a2
大于等于peitong
,则输出格式化字符串 "%d-Y %d-Y\nqing 2 zhao gu hao 1"。 - 如果
a2
大于等于jinru
且a2
小于peitong
,则输出格式化字符串 "%d-N %d-Y\n2: huan ying ru guan"。 - 否则,输出格式化字符串 "%d-N %d-N\nzhang da zai lai ba"。
- 如果
四、程序源代码
#include <stdio.h> int main() { int jinru,peitong,a1,a2; scanf("%d %d %d %d",&jinru,&peitong,&a1,&a2); if(a1==a2) { if(a1<jinru) printf("%d-N %d-N\nzhang da zai lai ba",a1,a2); else printf("%d-Y %d-Y\nhuan ying ru guan",a1,a2); } else if(a1>a2) { if(a2>=jinru) printf("%d-Y %d-Y\nhuan ying ru guan",a1,a2); else if(a2<jinru&&a1>=peitong) printf("%d-Y %d-Y\nqing 1 zhao gu hao 2",a1,a2); else if(a1>=jinru&&a1<peitong) printf("%d-Y %d-N\n1: huan ying ru guan",a1,a2); else printf("%d-N %d-N\nzhang da zai lai ba",a1,a2); } else { if(a1>=jinru) printf("%d-Y %d-Y\nhuan ying ru guan",a1,a2); else if(a1<jinru&&a2>=peitong) printf("%d-Y %d-Y\nqing 2 zhao gu hao 1",a1,a2); else if(a2>=jinru&&a2<peitong) printf("%d-N %d-Y\n2: huan ying ru guan",a1,a2); else printf("%d-N %d-N\nzhang da zai lai ba",a1,a2); } return 0; }
五、题目评分
L1-084 拯救外星人
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是计算输入的两个整数之和,并计算从 1 到和的阶乘,并输出结果。
三、程序设计思路及结构说明
- 声明三个整数变量
a
、b
和c
,用于存储输入的整数。 - 使用
cin
输入流从标准输入中读取两个整数,并分别将其存储到变量a
和b
中。 - 声明并初始化变量
i
为 0,用于控制循环。 - 声明并初始化变量
sum
为 1,用于存储阶乘的结果。 - 计算
c
的值,即a
和b
的和。 - 使用
for
循环从 1 到c
进行遍历。- 在每次循环中,将当前循环变量
i
乘以sum
并将结果赋值给sum
。
- 在每次循环中,将当前循环变量
- 使用
printf
函数输出变量sum
的值。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main() { int a,b,c; cin>>a>>b; int i=0; int sum=1; c=a+b; for(i=1;i<=c;i++) { sum*=i; } printf("%d\n",sum); return 0; }
五、题目评分
L1-085 试试手气
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是模拟了一种投骰子的游戏。根据输入的骰子选点情况和投骰子次数,输出最后一次投骰子得到的点数序列。
三、程序设计思路及结构说明
- 声明一个二维整型数组
touzi
,用于表示一个 6x6 的图,其中第 0 列和第 0 行不考虑。 - 声明一个一维整型数组
res
,用于记录最后一次投骰子的结果。 - 使用嵌套的
for
循环,从 1 到 6 进行遍历。- 在每次循环中,使用
scanf
函数输入一个整数,并将其存储到变量num
中。 - 将第
num
列的第i
个元素标记为 1,表示第i
个骰子选过了点数num
。
- 在每次循环中,使用
- 使用
scanf
函数输入一个整数n
,表示投骰子的次数。 - 使用嵌套的
for
循环,进行n
次投骰子操作。- 在每次循环中,使用嵌套的
for
循环,从 1 到 6 进行遍历。- 在内层的嵌套循环中,从 6 到 1 逆序遍历。
- 如果当前位置的元素为 0,表示该点数还未选择,则将其标记为 1,并将该点数存储到数组
res
的第j-1
个元素中(因为数组索引从 0 开始)。 - 然后跳出内层的循环。
- 如果当前位置的元素为 0,表示该点数还未选择,则将其标记为 1,并将该点数存储到数组
- 在内层的嵌套循环中,从 6 到 1 逆序遍历。
- 在每次循环中,使用嵌套的
- 使用循环遍历数组
res
,并使用printf
函数按照要求输出结果。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main() { int touzi[7][7]={0}; //创建6*6的图,第0列和第0行不考虑 int res[6]; //记录最后一次投骰子的结果 for(int i=1;i<=6;i++) { int num; scanf("%d",&num); touzi[num][i]=1; //第几列就是第几个骰子,每列记录各点数状态,选过的点数标记1 } int n; scanf("%d",&n); for(int i=0;i<n;i++) { for(int j=1;j<=6;j++) { for(int k=6;k>=1;k--) { if(touzi[k][j]==0) { touzi[k][j]=1; res[j-1]=k; break; } } } } for(int k=0;k<6;k++) { printf("%d",res[k]); if(k!=5) printf(" "); } return 0; }
五、题目评分
L1-086 斯德哥尔摩火车上的题
一、题目编号及题目说明
二、程序功能测试及说明
该程序的功能是比较两个字符串s和s1,将满足条件的字符组合成新的字符串,并输出结果。具体的处理逻辑是判断相邻字符的奇偶性是否相同,如果相同,则选择较大的字符。最后按照要求输出结果。
三、程序设计思路及结构说明
- 声明了字符串变量s和s1,用来存储输入的两个字符串。
- 声明了字符串变量ss和ss1,用来存储处理后的结果。
- 使用cin输入读取字符串s和s1。
- 使用for循环遍历字符串s和s1,从索引1开始。
- 在每次循环中,判断当前字符和前一个字符的奇偶性是否相同。
- 如果相同,则将较大的字符追加到字符串ss或ss1中。
- 在每次循环中,判断当前字符和前一个字符的奇偶性是否相同。
- 使用if语句判断ss和ss1是否相等。
- 如果相等,则输出ss。
- 否则,分行输出ss和ss1。
四、程序源代码
#include<bits/stdc++.h> using namespace std; int main(){ string s,s1; string ss="",ss1=""; cin>>s>>s1; for(int i=1;i<s.size();i++){ if (s[i] % 2 == s[i-1] % 2) { ss += max(s[i], s[i-1]); } } for(int i=1;i<s1.size();i++){ if (s1[i] % 2 == s1[i-1] % 2) { ss1 += max(s1[i], s1[i-1]); } } if(ss==ss1) cout<<ss; else cout<<ss<<endl<<ss1; }