洛谷-入门3-循环结构1
P5718 【深基4.例2】找最小值
题目描述
给出 n 和 n 个整数 ai,求这 n 个整数中最小值是什么。
输入格式
第一行输入一个正整数 n,表示数字个数。
第二行输入 n 个非负整数,表示 a1,a2…an,以空格隔开。
输出格式
输出一个非负整数,表示这 n 个非负整数中的最小值。
输入输出样例
输入 #1复制
5 5 7 4 2 6
输出 #1复制
2
说明/提示
数据保证,n≤100 且 0≤ai≤1000。
实现代码:
#include<bits/stdc++.h>
using namespace std;
void solve(){
int a[110];
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
cout<<a[0];
}
int main(){
int T=1;
while(T--){
solve();
}
return 0;
}
P5719 【深基4.例3】分类平均
题目描述
给定 n 和 k,将从 1 到 n 之间的所有正整数可以分为两类:A 类数可以被 k 整除(也就是说是 k 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。
数据保证两类数的个数都不会是 0。
输入格式
输入两个正整数 n 与 k。
输出格式
输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。
输入输出样例
输入 #1复制
100 16
输出 #1复制
56.0 50.1
说明/提示
数据保证,1≤n≤10000,1≤k≤100。
实现代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
double sum=0,cnt=0, SUM=0,CNT=0;
for(int i=1;i<=n;i++){
if(i%k==0){
sum++;
cnt+=i;
}
else SUM++,CNT+=i;
}
printf("%.1lf %.1lf",cnt/sum,CNT/SUM);
return 0;
}
P5720 【深基4.例4】一尺之棰
题目描述
《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 2,向下取整)。第几天的时候木棍的长度会变为 1?
输入格式
输入一个正整数 a,表示木棍长度。
输出格式
输出一个正整数,表示要第几天的时候木棍长度会变为 1。
输入输出样例
输入 #1复制
100
输出 #1复制
7
说明/提示
数据保证,1≤a≤109。
实现代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
cin>>n;
while(n!=1){
n=n/2;
sum++;
}
cout<<sum+1;
return 0;
}
P5721 【深基4.例6】数字直角三角形
题目描述
给出 n,请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。
输入格式
输入一个正整数 n。
输出格式
输出如题目要求的数字直角三角形。
输入输出样例
输入 #1复制
5
输出 #1复制
0102030405 06070809 101112 1314 15
说明/提示
数据保证,1≤n≤13。
实现代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
cnt++;
if(cnt<10){
cout<<"0"<<cnt;
}
else cout<<cnt;
}
cout<<endl;
}
return 0;
}
P1009 [NOIP 1998 普及组] 阶乘之和
用高精度计算出 S=1!+2!+3!+⋯+n!(n≤50)。
其中 ! 表示阶乘,定义为 n!=n×(n−1)×(n−2)×⋯×1。例如,5!=5×4×3×2×1=120。
输入格式
一个正整数 n。
输出格式
一个正整数 S,表示计算结果。
输入输出样例
输入 #1复制
3
输出 #1复制
9
说明/提示
【数据范围】
对于 100% 的数据,1≤n≤50。
【其他说明】
注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 n≤20,使用书中的代码无法通过本题。
如果希望通过本题,请继续学习第八章高精度的知识。
NOIP1998 普及组 第二题
实现代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=111;
int a[N]={0},s[N]={0};
int n;
void fun(int x){
int t=0;
for(int i=100;i>=1;i--){
a[i]=a[i]*x+t;
t=a[i]/10;
a[i]=a[i]%10;
}
}
void f(){
int t=0;
for(int i=100;i>=1;i--){
s[i]+=a[i]+t;
t=s[i]/10;
s[i]=s[i]%10;
}
}
signed main(){
cin>>n;
a[100]=1;
for(int i=1;i<=n;i++){
fun(i);
f();
}
for(int i=1;i<=100;i++){
if(s[i]){
for(int j=i;j<=100;j++){
cout<<s[j];
}
return 0;
}
}
return 0;
}
P1980 [NOIP 2013 普及组] 计数问题
题目背景
NOIP2013 普及组 T1
题目描述
试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。
输入格式
2 个整数 n,x,之间用一个空格隔开。
输出格式
1 个整数,表示 x 出现的次数。
输入输出样例
输入 #1复制
11 1
输出 #1复制
4
说明/提示
对于 100% 的数据,1≤n≤106,0≤x≤9。
实现代码:
#include<bits/stdc++.h>
using namespace std;
void solve(){
int a[110];
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
cout<<a[0];
}
int main(){
int T=1;
while(T--){
solve();
}
return 0;
}
P1035 [NOIP 2002 普及组] 级数求和
题目描述
已知:Sn=1+21+31+…+n1。显然对于任意一个整数 k,当 n 足够大的时候,Sn>k。
现给出一个整数 k,要求计算出一个最小的 n,使得 Sn>k。
输入格式
一个正整数 k。
输出格式
一个正整数 n。
输入输出样例
输入 #1复制
1
输出 #1复制
2
说明/提示
【数据范围】
对于 100% 的数据,1≤k≤15。
【题目来源】
NOIP 2002 普及组第一题
实现代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
double sum=0;
for(int i=1;;i++){
sum+=1.0/i;
if(sum>n){
cout<<i;
return 0;
}
}
return 0;
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)