
本文共 7570 字,大约阅读时间需要 25 分钟。
制作不易,大家的点赞和关注就是我更新的动力!
由于这些题全是大一寒假刷的,部分还是c语言,部分的解题方法比较复杂,希望大家体谅。有问题欢迎大家在评论区讨论,有不足也请大家指出,谢谢大家!
温馨提示:可以点目录跳转到相应题目哦。
1021 个位数统计
分数 15
作者 CHEN, Yue
单位 浙江大学
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M
的格式在一行中输出该位数字 D
及其在 N 中出现的次数 M
。要求按 D
的升序输出。
输入样例:
100311
输出样例:
0:21:33:1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include using namespace std;int main(){ string n; cin>>n; int i,a[12]={0}; for(i=0;i
1022 D进制的A+B
分数 20
作者 CHEN, Yue
单位 浙江大学
输入两个非负 10 进制整数 A 和 B (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例:
123 456 8
输出样例:
1103
鸣谢用户谢浩然补充数据!
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#includeusing namespace std;int main(){ long long a,b,m,d,r[200]; cin>>a>>b>>d; long long sum=a+b; int i=0,j=0; while(sum) { r[i++]=sum%d; sum/=d; } for(i=i-1;i>=0;i--) { cout<
1023 组个最小数
分数 20
作者 CAO, Peng
单位 Google
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入格式:
输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。
输出格式:
在一行中输出能够组成的最小的数。
输入样例:
2 2 0 0 0 3 0 0 1 0
输出样例:
10015558
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include using namespace std;int main(){ int i,j,aa,cn=0,a[10]={0}; for(i=0;i<10;i++) { cin>>aa; a[i]+=aa;; } int b[500]={0}; for(i=0,j=0;i<10;i++) { if(a[i]!=0){ for(int k=0;k b[0]) { mi=i;break; } } } if(b[0]==0) { cout<
1024 科学计数法
分数 20
作者 HOU, Qiming
单位 浙江大学
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].
[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。
现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。
输入格式:
每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。
输出格式:
对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。
输入样例 1:
+1.23400E-03
输出样例 1:
0.00123400
输入样例 2:
-1.2E+10
输出样例 2:
-12000000000
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include #include using namespace std;int main(){ string a; cin>>a; double b; int i,j,point,c,e,zhi=0; if(a[0]=='-') cout<
1025 反转链表
分数 25
作者 CHEN, Yue
单位 浙江大学
给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤105)、以及正整数 K (≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。
接下来有 N 行,每行格式为:
Address Data Next
其中 Address
是结点地址,Data
是该结点保存的整数数据,Next
是下一结点的地址。
输出格式:
对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。
输入样例:
00100 6 400000 4 9999900100 1 1230968237 6 -133218 3 0000099999 5 6823712309 2 33218
输出样例:
00000 4 3321833218 3 1230912309 2 0010000100 1 9999999999 5 6823768237 6 -1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#includeusing namespace std;struct node{ int date; int next; };int main(){ int head,n,k,i,j,ad; cin>>head>>n>>k; node a[100001]; for(i=0;i >ad; cin>>a[ad].date >>a[ad].next ; } int p=head; int sum=0;//可能有不在链表的结点 vector v; while(p!=-1) { v.push_back(p); p=a[p].next ;sum++; } int pp=0; int s=sum/k; i=0; for(j=0;j
1026 程序运行时间
分数 15
作者 CHEN, Yue
单位 浙江大学
要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗费的时间。这个时间单位是 clock tick,即“时钟打点”。同时还有一个常数 CLK_TCK,给出了机器时钟每秒所走的时钟打点数。于是为了获得一个函数 f 的运行时间,我们只要在调用 f 之前先调用 clock(),获得一个时钟打点数 C1;在 f 执行完成后再调用 clock(),获得另一个时钟打点数 C2;两次获得的时钟打点数之差 (C2-C1) 就是 f 运行所消耗的时钟打点数,再除以常数 CLK_TCK,就得到了以秒为单位的运行时间。
这里不妨简单假设常数 CLK_TCK 为 100。现给定被测函数前后两次获得的时钟打点数,请你给出被测函数运行的时间。
输入格式:
输入在一行中顺序给出 2 个整数 C1 和 C2。注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,107]。
输出格式:
在一行中输出被测函数运行的时间。运行时间必须按照 hh:mm:ss
(即2位的 时:分:秒
)格式输出;不足 1 秒的时间四舍五入到秒。
输入样例:
123 4577973
输出样例:
12:42:59
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include using namespace std;int main(){ long long c1,c2,i,j; cin>>c1>>c2; long long int sum; sum=round((c2-c1)*1.0/100); int h=sum/3600; int m=sum%3600/60; int s= sum-h*3600-m*60; printf("%02d:%02d:%02d",h,m,s); return 0;}
1027 打印沙漏
分数 20
作者 CHEN, Yue
单位 浙江大学
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
***** *** * ********
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
***** *** * ********2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include #include #include using namespace std;int main(){ int i=1,j=1,k=1,n,count=0; char a; cin>>n>>a; for(i=1;i<=n;i+=j*2) { j+=2; k+=2; } i-=j*2; k-=2; count=n-i; for(i=0;i
1028 人口普查
分数 20
作者 CHEN, Yue
单位 浙江大学
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd
(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
输入样例:
5John 2001/05/12Tom 1814/09/06Ann 2121/01/30James 1814/09/05Steve 1967/11/20
输出样例:
3 Tom John
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include #include using namespace std;struct st{ char a[10]; int year; int month; int day;};bool cmp(st q,st w){ if(q.year !=w.year ) return q.year >n;//getchar(); st s[n+2]; for(i=0;i <9||(s[i].month ==9&&s[i].day<6)))) { if(min==i) min=i+1;continue; } else if(s[i].year >2014||(s[i].year ==2014&&(s[i].month >9||(s[i].month ==9&&s[i].day>6)))) { continue; } else { count++; } } for(i=n-1;i>=0;i--) { if(s[i].year >2014||(s[i].year ==2014&&(s[i].month >9||(s[i].month ==9&&s[i].day>6)))) { if(max==i) max=i-1; continue; } } if(count==0){ cout<<0;return 0; } cout< <<" "< <<" "<
1029 旧键盘
分数 20
作者 CHEN, Yue
单位 浙江大学
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _
(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test_hs_s_a_es
输出样例:
7TI
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include #include using namespace std;int main(){ char a[90],b[90],c[90]; int aa[500]={0}; cin>>a>>b; //cout< < ='a'&&a[i]<='z') { a[i]=a[i]-32; } } for(i=0;i ='a'&&a[i]<='z') { b[i]=b[i]-32; } } int fl=0,k=0,p,f=0; for(i=0;i
1030 完美数列
分数 25
作者 CAO, Peng
单位 Google
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。
现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数 N 和 p,其中 N(≤105)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出 N 个正整数,每个数不超过 109。
输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入样例:
10 82 3 20 4 5 1 6 7 8 9
输出样例:
8
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
栈限制
8192 KB
代码:
#include#include #include #include #include using namespace std;int main(){ long long n,p,i,j,ji,max=0,cn=0,min; cin>>n>>p; long long int a[n+2]; for(i=0;i >a[i]; } sort(a,a+n); for(i=0;i max){ max=cn; } else break; } } cout<
后续题目会尽快更新!
发表评论
最新留言
关于作者
