目录
1.长度(gc2016五年级1)
输入格式
输出格式
输入/输出例子1
2.面积
输入格式
输出格式
输入/输出例子1
样例解释
3.唯一(gc2016五年级3)
输入格式
输出格式
输入/输出例子1
4. 计时器(gc2016五年级4)
输入格式
输出格式
输入/输出例子1
样例解释
5.方案数(gc2016五年级5)
6.位置(gc2016五年级6)
输入格式
输出格式
输入/输出例子1
hello,大家好,我是金奇人生。话不多说,我们来讲代码!!!
1.长度(gc2016五年级1)
学校体艺节有一种新形式的马拉松比赛:运动员需要用N 分钟的时间跑,看谁跑的最远。晨晨报名参加了这个比赛,已知她每分钟的速度是v1,v2,…,vn,问晨晨总共跑了多长的距离?
输入格式
第一行:1个正整数N,表示晨晨要跑N分钟。 N的范围为[1, 100]。
第二行:N个整数,表示晨晨每分钟跑步的速度。每个数的范围为[1, 500]。
输出格式
一个整数,N分钟晨晨总共跑的距离。
输入/输出例子1
输入:3
2 5 3输出:10
这道题纯纯签到题,来!
#include<bits/stdc++.h> using namespace std; int n,a,ans; int main(){ cin>>n; for(int i=1; i<=n; i++){ cin>>a; ans+=a; } cout<<ans; return 0; }2.面积
为了准备运动会颁奖典礼,学校想购买一块长方形的红地毯,已知学校给的的钱刚好够买面积为N的红地毯。由于地毯的边上要用长度为1的花边装饰,当然是边长越短越好(长度是整数)。为了节省花边,老师要求晨晨通过编计算机程序来计算边长最短是多少?
输入格式
一行:1个整数N,表示矩形的面积。N的范围为[1, 1000000000]。
输出格式
一行:一个整数表示边长。
输入/输出例子1
输入:
15
输出:
16
样例解释
(红地毯的边长分别为3和5)
这道题纯枚举,注意:要开long long!
#include<bits/stdc++.h> using namespace std; long long n,ans=LONG_LONG_MAX; int main(){ scanf("%lld",&n); for(int i=1; i*i<=n; i++){ long long t=0; if(n%i==0){ t=(i+n/i)*2; if(t>ans)break; ans=min(ans,t); } } printf("%lld",ans); return 0; }3.唯一(gc2016五年级3)
晨晨陪哥哥到电信局去买手机,电信局送一个手机号给他们。现在有N个号码供晨晨他们选,已知这些电话都是130开头的,因此只要挑选后8位的数字。
晨晨的哥哥想选一个有“特点”的号码:每个数字要么是0,要么是奇数。
由于号码太多,并且有“特点”的号码只有一个,哥哥要求晨晨通过编计算机程序来找出这个号码。
输入格式
第1行:一个正整数N,表示号码的个数。N的范围为[1, 1000]。
第2行:N个整数,每个正整数是一个8位的数字组成,前面可能有0。输出格式
一行:一个8位整数,每个数字要么是0,要么是奇数。
(输入数据保证有且仅有一个答案)
输入/输出例子1
输入:3
35679012
00130597
08590383输出:00130597
代上码!!!
#include<bits/stdc++.h> using namespace std; int n; string s,u; int main(){ cin>>n; for(int i=1; i<=n; i++){ cin>>s; bool f=true; for(int j=0; j<s.size(); j++){ if((s[j]-'0')%2==0 && s[j]!='0'){ f=false; break; } } if(f==true)u=s; } cout<<u; return 0; }4. 计时器(gc2016五年级4)
输入格式
第1行:2个正整数N和K。N、K的范围为[1, 100000]。
第2行:N个整数,每个整数范围为[0, 99]。
输出格式
一整数,表示晨晨总共会收集到的计时器个数。
输入/输出例子1
输入:
6 3
0 45 94 91 91 85
输出:
4
样例解释
样例解释:
晨晨可以收集到第1、3、4、6这4个计时器。
依旧题目先行,代码殿后。
#include<bits/stdc++.h> using namespace std; long long n,k,a,ans; int main(){ cin>>n>>k; for(int i=0; i<n; i++){ cin>>a; if((a+i*k)%100==0)ans++; } cout<<ans; return 0; }5.方案数(gc2016五年级5)
这题我用了回溯的方法,其实可以暴力~~~
#include<bits/stdc++.h> using namespace std; int k,yu=1,a[5],t=1; string s[5],b[30]; int f(int h){ if(h>k){ string shu=""; for(int i=1; i<=k; i++) shu+=s[a[i]]; for(int i=1; i<t; i++){ if(shu==b[i]){ yu--; break; } } b[t]=shu; t++; } else{ for(int i=1; i<=k; i++){ bool u=1; for(int j=1; j<h; j++){ if(i==a[j]){ u=0; break; } } if(u==1){ a[h]=i; f(h+1); } } } } int main(){ cin>>k; for(int i=2; i<=k; i++) yu*=i; for(int i=1; i<=k; i++) cin>>s[i]; if(k==1){ cout<<1; return 0; } f(1); cout<<yu; return 0; }6.位置(gc2016五年级6)
由于晨晨还没有研究出核心算法,在游戏中总是被明明击败。晨晨拿出了杀手锏进行反击,精心设计了一个数学难题:
N个地砖,每个上面写有一个编号,开始这些编号从左到右正好是1到N。例如N=20时,地砖摆放如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
晨晨对其中哪些位置上的编号是回文数感兴趣,不过这个问题不足以击败明明,比如上面的N=20,明明很容易就给出答案:
1 2 3 4 5 6 7 8 9 11
晨晨为了干扰明明,疯狂地进行了M次操作,每次操作如下:
给定2个整数a和b (1 ≤ a ≤ b ≤N),晨晨把位置a到b的这段地砖的编号左右“翻转”一下。
比如对于N=20,M=2。执行一次a=3, b=15的操作,地砖编号变为:
1 2 15 14 13 12 11 10 9 8 7 6 5 4 3 16 17 18 19 20
再执行一次a=1, b=4的操作,地砖编号变为:
14 15 2 1 13 12 11 10 9 8 7 6 5 4 3 16 17 18 19 20
如果这个时候晨晨再问明明回文数的位置,明明就要给出答案:
3 4 7 9 10 11 12 13 14 15
输入格式
第一行:2个正整数N,M。N的范围为[1, 1000000],M的范围为[1, 1000]。
下面M行:每行2个整数a和b(1 ≤ a ≤ b ≤N)。
数据范围:50%数据1 ≤ N ≤ 10000;
输出格式
一行整数,表示所有编号为回文数的地砖的位置。
输入/输出例子1
输入:100 3
5 20
1 100
10 90
输出:2 13 15 16 17 18 19 21 32 43 54 65 76 87 97 98 99 100
这道题如果下标计数加暴力会超时,要另想办法!!!
#include<bits/stdc++.h> using namespace std; int n,m,a,b; int hui[1000005],t; int main(){ cin>>n>>m; for(int i=1; i<=n; i++){ int shu=i,yu=0; while(shu!=0){ yu=yu*10+shu%10; shu/=10; } if(yu==i)hui[++t]=i; } for(int i=1; i<=m; i++){ cin>>a>>b; for(int j=1; j<=t; j++) if(hui[j]>=a && hui[j]<=b)hui[j]=b-hui[j]+a; } sort(hui+1,hui+1+t); for(int i=1; i<=t; i++) cout<<hui[i]<<" "; return 0; }这套题整体来说不难,就是第五题和第六题有点儿烦~~~
下课@@@