1.除以13
描述
输入一个大于0的大整数N,长度不超过100位,要求输出其除以13得到的商和余数。
输入
一个大于0的大整数,长度不超过100位。
输出
两行,分别为整数除法得到的商和余数。
样例输入:
2132104848488485
样例输出:
164008065268345
0
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int t,len,shang[300],yu=0,b[150]={0}; //yu表示余数,shang[300]表示商
char a[150];
gets(a+1); //从标准输入设备读取字符串函数
len=strlen(a+1); //获取字符串长度
for(int i=1;i<=len;i++)
{
b[i]=a[i]-48; //ascll表中0-9是在48-57,所以需要重零开始
b[i]=b[i]+yu*10;
yu=b[i]%13; //得到余数
shang[i]=b[i]/13; //得到商
}
for(int j=1;j<=len;j++) //用于删除前导0
{
if(shang[j]!=0)
{
t=j;
break;
}
}
for(t;t<=len;t++) //此时t=j
{
cout<<shang[t];
}
cout<<endl;
cout << yu<< endl;
return 0;
}
2.判决素数个数
描述
输入两个整数X和Y,输出两者之间的素数个数(包括X和Y)。
输入
两个整数X和Y(1 <= X,Y <= 105)。
输出
输出一个整数,表示X,Y之间的素数个数(包括X和Y)。
样例输入:
1 100
样例输出:
25
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
bool isprime(int n)
{
if(n < 2) return false;
if(n == 2) return true;
for(int i = 2; i <= sqrt(n); ++i)
{
if(n % i == 0) return false;
}
return true;
}
int main()
{
int x, y, sum = 0;
scanf("%d%d",&x,&y);
if(x>y) swap(x,y);//如果x>y,则需要交换
for(int i = x; i <= y; ++i) //循环出全部数,判断某个数是素数。
{
if(isprime(i)) sum++;
}
printf("%d",sum);
return 0;
}
3.人民币支付
描述
从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票。
输入
一个小于1000的正整数。
输出
输出分行,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数
样例输入
735
样例输出
7
0
1
1
1
0
#include <iostream>
using namespace std;
//计算返回位数
int juge(int n){
int count=0;
while(n){
n/=10;
count++;
}
return count;
}
int main(){
int n,a=0,b=0,c=0,d=0,e=0; //定义输入的变量,以及每张人民币的面值为代表: a:100 b:50 c:20……
cin >> n; //例如 396
while(n>5){ //如果输入金额大于5,那么进入循环,判断其位数,再从大往小递减
if(juge(n) == 3){ //这里的3表示3个零, 例如:n=96 a=3
a=n/100;
n=n%100;
}
if(juge(n) == 2){ //同上 例如:n=96
if(n >= 50){
n=n-50;
b++;
}
while(n>=20){ //例如:( n=46 a=3 b=1 c=0),(n=26 a=3 b=1 c=1),(n=6 a=3 b=1 c=2)
n=n-20;
c++;
}
if(n>=10){ //例如:(n=6 a=3 b=1 c=2 d=0)
n=n-10;
d++;
}
}
if(n >= 5){ //例如:(n=6 a=3 b=1 c=2 d=0),//(n=1 a=3 b=1 c=2 d=0 e=1)
n=n-5;
e++;
}
}
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
cout<<e<<endl;
cout<<n<<endl;
}
4.最长单词
描述
一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式
输入
一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式
输出
该句子中最长的单词。如果多于一个,则输出第一个
样例输入
I am a student of Peking University.
样例输出
University
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char a[2500]; //题目说明不超过500但是试了501-510运行都显示错误 不清楚为什么 给大点就完事 有人知道原因希望告知评论下
gets(a);
int len=strlen(a);
int k=0,max=-1,max_x;
for(int i=0;i<len;i++) //遍历
{
if( (a[i] >= 'a' && a[i]<='z') || (a[i] >= 'A' && a[i] <='Z')) //若为大小字母则 计数器 k++
{
k++;
}
else //若为 空格与点则
{
if(k>max) //判断最大长度
{
max=k; //记录最大长度存入max中
max_x=i-max; //记录最大单词的起始坐标
}
k=0; //计数器清零
}
}
for(int i=max_x;i<max_x+max;i++) //输出起点 为 max_x 长度为max的单词
cout<<a[i];
}
5.Tomorrow never knows?
描述
甲壳虫的《A day in the life》和《Tomorrow never knows》脍炙人口,如果告诉你a day in the life,真的会是tomorrow never knows?相信学了计概之后这个不会是难题,现在就来实现吧。 读入一个格式为yyyy-mm-dd的日期(即年-月-日),输出这个日期下一天的日期。可以假定输入的日期不早于1600-01-01,也不晚于2999-12-30。
输入
输入仅一行,格式为yyyy-mm-dd的日期。
输出
输出也仅一行,格式为yyyy-mm-dd的日期
样例输入
2010-07-05
样例输出
2010-07-06
提示
闰年的标准:
(1)普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
地球公转示意图
(2)世纪年能被400整除的是闰年。(如2000年是闰年,1100年不是闰年) 输入语句scanf("%d-%d-%d",&y,&m,&d)可以存储年,月,日.输出语句格式类似printf("%d-%02d-%02d\n",year,month,day).
#include <stdio.h> //注意此头文件一定要写对,否则提交出错
int main()
{
int year=0,month=0,day=0;
scanf("%d-%d-%d", &year, &month, &day);
bool leapyear = (year % 4 == 0 && year % 100 != 0) || (year % 400 ==0);
switch(month)
{
//有31天的月份进行计算
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
if (day == 31)
{
month++;
day = 1;
}
else
{
day++;
}
break;
//12月份比较特殊,所以单独处理
case 12:
if (day == 31)
{
year++;
month = 1;
day = 1;
}
else
{
day++;
}
break;
//2月份也是比较特殊
case 2:
if (leapyear)
{
if (day == 29)
{
month ++;
day = 1;
}
else
{
day++;
}
}
else
{
if (day == 28)
{
month ++;
day = 1;
}
else
{
day++;
}
}
break;
//30天的月份处理
case 4:
case 6:
case 9:
case 11:
if (day == 30)
{
month++;
day = 1;
}
else
{
day++;
}
break;
default:
break;
}
printf("%d-%02d-%02d\n", year, month, day);
return 0;
}
6.话题焦点人物
描述
微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如Lee发出一条微博为:“期末考试顺利 @Kim @Neo”,则Lee提及了Kim和Neo两位用户。
我们收集了N(1 < N < 10000)条微博,并已将其中的用户名提取出来,用小于100的正整数表示。
通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(题目保证这样的人有且只有一个),并找出那些提及它的人。
输入
输入共两部分:
第一部分是微博数量N,1 < N < 10000。
第二部分是N条微博,每条微博占一行,表示为:
发送者序号a,提及人数k(0 < = k < = 20),然后是k个被提及者序号b1,b2...bk;
其中a和b1,b2...bk均为大于0小于100的整数。相邻两个整数之间用单个空格分隔。
输出
输出分两行:
第一行是被提及最多的人的序号;
第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次。
样例输入
5
1 2 3 4
1 0
90 3 1 2 4
4 2 3 2
2 1 3
样例输出
3
1 2 4
#include <iostream>
using namespace std;
int main(){
int a[110][110];
int c[110];
int n;
cin>>n; //输入微博数量
for(int i=1;i<=n;i++){
int m,k;
cin>>m>>k;
for(int j=1;j<=k;j++) {//标记每个@过的
int t;
cin>>t;
a[t][m]=1;
c[t]++; //@一次加1
}
}
int maxv=c[1],num=1;
for(int i=2;i<=100;i++){
if(maxv<c[i])
{
maxv=c[i];
num=i;
}
}
cout<<num<<endl;
for(int i=0;i<=100;i++) {
if(a[num][i])
cout<<i<<' ';
}
return 0;
}
7.与指定数字相同的数的个数
描述
输出一个整数序列中与指定数字相同的数的个数。
输入
输入包含三行:
第一行为N,表示整数序列的长度(N <= 100);
第二行为N个整数,整数之间以一个空格分开;
第三行包含一个整数,为指定的数字m。
输出
输出为N个数中与m相同的数的个数。
样例输入
3
2 3 2
2
样例输出
2
#include <stdio.h>
int main()
{
int N;
scanf("%d",&N);
int a[N];
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
int m,count=0;
scanf("%d",&m);
for(int i=0;i<N;i++)
{
if(a[i]==m)
{
count++;
}
}
printf("%d",count);
return 0;
}
8.陶陶摘苹果
描述
陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。
现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
输入
包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
输出
包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。
样例输入
100 200 150 140 129 134 167 198 200 111
110
样例输出
5
#include<iostream>
#include<cstdio>
using namespace std;
int a[15];
int main()
{
int b=0,c,e,f,n;
for(int i=1;i<=10;i++) //循环输入苹果高度
cin>>a[i];
cin>>n;n=n+30; //输入她手长加凳子高度
for(int i=1;i<=10;++i)//进行比较,能不能摘到。可以就累加1
if(n>=a[i])
b++;
cout<<b<<endl;
return 0;
}
9.计算书费
描述
下面是一个图书的单价表:
计算概论 28.9 元/本
数据结构与算法 32.7 元/本
数字逻辑 45.6元/本
C++程序设计教程 78 元/本
人工智能 35 元/本
计算机体系结构 86.2 元/本
编译原理 27.8元/本
操作系统 43 元/本
计算机网络 56 元/本
JAVA程序设计 65 元/本
给定每种图书购买的数量,编程计算应付的总费用。
输入
输入一行,包含10个整数(大于等于0,小于等于100),分别表示购买的《计算概论》、《数据结构与算法》、《数字逻辑》、《C++程序设计教程》、《人工智能》、《计算机体系结构》、《编译原理》、《操作系统》、《计算机网络》、《JAVA程序设计》的数量(以本为单位)。每两个整数用一个空格分开。
输出
输出一行,包含一个浮点数f,表示应付的总费用。精确到小数点后一位。
样例输入
1 5 8 10 5 1 1 2 3 4
样例输出
2140.2
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
double a[10]={28.9,32.7,45.6,78,35,86.2,27.8,43,56,65};//价格存放
double x,s=0;
for(int i=0;i<10;i++)
{
cin>>x; //每次输入本数
s+=a[i]*x;//对应本数乘对应价格 累加
}
printf("%.1lf\n",s);//保留一位小数输出
return 0;
}
10.年龄与疾病
描述
某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。
输入
共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。
输出
按照0-18、19-35、36-60、61以上(含61)四个年龄段输出该段患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位。每个年龄段占一行,共四行。
样例输入
10
1 11 21 31 41 51 61 71 81 91
样例输出
20.00%
20.00%
20.00%
40.00%
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int n,i;
int age[100];
double percent[4]= {0};
cin>>n;//病人数n
for(i=0; i<n; i++)
cin>>age[i]; //患病年龄
for(i=0; i<n; i++)
{
if(age[i]<=18)
percent[0]++;//统计年龄在19岁以下的人数
if((age[i]>=19)&&(age[i]<=35))
percent[1]++;//统计年龄在19到35岁的人数
if((age[i]>=36)&&(age[i]<=60))
percent[2]++;//统计年龄在36到60岁的人数
if(age[i]>=61)
percent[3]++;//统计年龄在60岁以上的人数
}
cout<<setiosflags(ios::fixed)<<setprecision(2);//格式输出控制,保留两位小数
for(i=0; i<4; i++) //转换成百分数的形式输出
{
percent[i]=percent[i]*100.0/n;
cout<<percent[i]<<"%"<<endl;
}
return 0;
}
11.校门外的树
描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入
第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。
输出
包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
样例输入
500 3
150 300
100 200
470 471
样例输出
298
#include<cstdio>
#include<iostream>
using namespace std;
int a[10005];//设a(树的棵数)的最大值为10005。
int main(){
int L;
cin>>L;
for(int i=0;i<=L;i++){//循环设一个i最开始等于0.i小于等于L,i不停地加。
a[i]=1;//a【0】到L都把他设为1(1是有树,0是没树).a是马路的长度。
}
int M;
cin>>M;//输入一个M(区域数);
for(int i=1;i<=M;i++){//循环i最开始等于1,i小于等于M,i不停地加。
int c,d;
cin>>c>>d;
for(int j=c;j<=d;j++){//循环把c到d的树拔掉。
a[j]=0;
}
}
int x;
x=0;
for(int j=0;j<=L;j++){//循环设一个数为j,j最开始等于0,j小于等于L,j不停地加。
if(a[j]==1){
x++;
}
}
printf("%d",x);//输出数x(最后剩下的树)。
return 0;
}
12.打印月历
描述
给定年月,打印当月的月历表。
输入
输入为一行两个整数,第一个整数是年份year(1900 ≤ year ≤ 2099),第二个整数是月份month(1 ≤ month ≤ 12),中间用单个空格隔开。
输出
输出为月历表。月历表第一行为星期表头,如下所示:
Sun Mon Tue Wed Thu Fri Sat
其余各行一次是当月各天的日期,从1日开始到31日(30日或28日)。 日期数字应于星期表头右对齐,即各位数与星期表头相应缩写的最后一个字母对齐。日期中间用空格分隔出空白。
样例输入
2006 5
样例输出
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
提示
闰年判断方法:能被4整除但不能被100整除,或者能被400整除。 1900年1月1日是周一。
#include<math.h>
#include<cstdio>
#include<cstdlib>
#include<cstring>
int main()
{
int y,m;
scanf("%d %d",&y,&m);
int a[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if((y%4==0&&y%100!=0)||y%400==0)
{
a[2]++;
}
long long s=0;
if(y==1900)
{
s=1;
}
for(int i=1900;i<y;i++)
{
if((i%4==0&&y%100!=0)||(y%400==0))
{
s=s+2;
}
else s++;
//printf("%d\n",s);
}
s=s%7;
for(int i=1;i<m;i++)
{
s=s+a[i];
}
//printf("%d\n",s);
s=s%7;
int t=0;
printf("Sun Mon Tue Wed Thu Fri Sat\n");
for(int i=1;i<=s;i++)
{
printf(" ");
t++;
}
for(int i=1;i<=a[m];i++)
{
if(i<10)
{
printf(" %d ",i);
}
else
{
printf(" %d ",i);
}
t++;
if(t==7)
{
t=0;
printf("\n");
}
}
}
13.计算两个日期之间的天数
描述
给定两个日期,计算相差的天数。比如2010-1-1和2010-1-3相差2天。
输入
共两行:
第一行包含三个整数startYear,startMonth,startDay,分别是起始年、月、日。
第二行包含三个整数endYear,endMonth,endDay,分别是结束年、月、日。
相邻两个整数之间用单个空格隔开。
年份范围在1~3000。保证日期正确且结束日期不早于起始日期。
输出
输出一个整数,即是两个日期相差的天数。
样例输入
2008 1 1
2009 1 1
样例输出
366
提示
闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。闰年的2月份有29天。
#include<iostream>
using namespace std;
int main(void){
int sy,sm,sd,ey,em,ed,C=0;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
cin>>sy>>sm>>sd;
cin>>ey>>em>>ed;
if(ey-sy==0)
{
if((sy%4==0&&sy%100!=0)||(sy%400==0))
m[2]=29;
for(int i=sm;i<em;i++)
{
if(i==sm)
C=m[i]-sd;
else
C+=m[i];
}
C+=ed;
if(sm==em)C=ed-sd;
return C;
}
else{
for(int i=sy;i<ey;i++)
{
if(i%4==0&&i%100!=0||i%400==0)C+=366;
else C+=365;
}
if(sy%4==0&&sy%100!=0||sy%400==0) m[2]=29;
for(int i=1;i<sm;i++) C-=m[i];
C-=sd;
if(ey%4==0&&ey%100!=0||ey%400==0) m[2]=29;
else m[2]=28;
for(int i=1;i<em;i++)C+=m[i];
C+=ed;
return C;
}
return 0;
}
14、统计字符数
描述
给定一个由a-z这26个字符组成的字符串,统计其中哪个字符出现的次数最多。
输入
输入包含一行,一个字符串,长度不超过1000。
输出
输出一行,包括出现次数最多的字符和该字符出现的次数,中间以一个空格分开。如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。
样例输入
abbccc
样例输出
c 3
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main() {
int cnt[26];
int max=0;
int len;
char str[1010];//字符串
char ch;
memset(str,0,sizeof(str));//清零
memset(cnt,0,sizeof(cnt));//清零
gets(str);//获取字符串
len=strlen(str);//获取长度
for(int i=0; i<len; i++) {//计数
cnt[str[i]-'a']++;//把计数器此字符的ASCII码-a的ASCII的那一项加一
}
for(int i=0; i<26; i++) {//找最大值
if(cnt[i]>max) {//用大于号做判断不用考虑输出ASCII小的那个,用大于等于就需要考虑
ch=(char)i+'a';//i+a的ASCII转成字符保存
max=cnt[i];
}
}
cout<<ch<<" "<<max; //输出出现次数最多的字符和该字符出现的次数
return 0;
}