[XDOJ]日常作业汇总(不定时更新)
事先声明:
1.该文章仅用于个人学习,谢绝未经本人同意和任何用于商业用途的搬运。
2.本人22级学生,学校题库内的题目可能会不定期更改题目要求,请各位参照答案的同学对照好题目要求,切莫直接抄袭。
[1~50]
2.数列分段
问题描述
给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段?
输入格式
输入的第一行包含一个整数n,表示数列中整数的个数。
第二行包含n个整数a1, a2, …, an,表示给定的数列,相邻的整数之间用一个空格分隔。
输出格式
输出一个整数,表示给定的数列有多个段。
样例输入
8
8 8 8 0 12 12 8 0
样例输出
5
样例说明
8 8 8是第一段,0是第二段,12 12是第三段,倒数第二个整数8是第四段,最后一个0是第五段。
评测用例规模与约定
1 ≤ n ≤ 1000,0 ≤ ai ≤ 1000。
#include <stdio.h>
int main(){
int i=0, n, m, count=1;//i为序号,n为输入数字数目,m为移动读取赋值的量,count为总共数组数目
scanf("%d", &n);
int s[n];
for(i; i<n; i++){
scanf("%d", &s[i]);
}
do{ m=s[i];
i++;
count++;
}while(m!=s[i+1]);
printf("%d", count);
return 0;
}
3.最小差值
问题描述
给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。
输入格式
输入第一行包含一个整数n。
第二行包含n个正整数,相邻整数之间使用一个空格分隔。
输出格式
输出一个整数,表示答案。
样例输入
5
1 5 4 8 20
样例输出
1
样例说明
相差最小的两个数是5和4,它们之间的差值是1。
样例输入
5
9 3 6 1 3
样例输出
0
样例说明
有两个相同的数3,它们之间的差值是0.
数据规模和约定
对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。
#include <stdio.h>
int main(){
int i, n, min, max, result;
scanf("%d", &n);
int str[n], dif[n];
for(i=0; i<n; i++){
scanf("%d", &str[i]);
}
for(i=0; i<n; i++){
if(str[i]<str[i+1]) dif[i]=str[i+1]-str[i];
else dif[i]=str[i]-str[i+1];
if(dif[i]<=dif[i+1]) result=dif[i];
else result=dif[i+1];
}
printf("%d", result);
return 0;
}
4.命令行选项
问题描述
请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,不含任何其他符号。在工具名字之后可能会包含若干选项(以减号”-”开头的字符串),还可能包含一些不是选项的参数(不以减号“-”开头的字符串)。
请写一个程序分析给出的命令行,输出命令行包含的不重复选项(即,重复的选项只输出一次)。
输入格式
输入是一个待处理的命令行,长度不超过 255 个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。
输出格式
按照字母升序输出该命令行中用到的所有选项的名称,如果一个选项在命令行中出现了多次,只输出一次,如果命令行不包含任何选项,则输出no。
样例输入1
ls -a -l -a documents -b
样例输出1
-a -b -l
样例输入2
ls
样例输出2
no
样例输入
ls -w 10 -x -w 15
样例输出
-w -x
5.消除类游戏
问题描述
消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
请注意:一个棋子可能在某一行和某一列同时被消除。
输入格式
输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。
输出格式
输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
样例输入1
4 5
2 2 3 1 2
3 4 5 1 4
2 3 2 1 3
2 2 2 4 4
样例输出1
2 2 3 0 2
3 4 5 0 4
2 3 2 0 3
0 0 0 4 4
样例说明
棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
样例输入2
4 5
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3
样例输出2
2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0
样例说明
棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。
评测用例规模与约定
所有的评测用例满足:1 ≤ n, m ≤ 30。
#include <stdio.h>
int main(){
int i, j, n, m, a[30][30]={0};
scanf("%d %d", &n, &m);
for(i=0; i<n; i++){
for(j=0; j<m; j++){
scanf("%d", &a[i][j]);
}
}
for(i=1; i<n-1; i++){
for(j=1; j<m-1; j++){
if(a[i][j]==a[i][j-1] && a[i][j]==a[i][j+1]){
a[i][j]=0;
a[i][j-1]=0;
a[i][j+1]=0;
}
if(a[i][j]==a[i-1][j] && a[i][j]==a[i+1][j]){
a[i][j]=0;
a[i-1][j]=0;
a[i+1][j]=0;
}
}
}
for(i=0; i<n; i++){
for(j=0; j<m; j++){
if(j!=m-1)
printf("%d ", a[i][j]);
else printf("%d\n", a[i][j]);
}
}
return 0;
}
6.数字排序
- 待完成
问题描述
给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。
7.车牌限行_分支结构
问题描述
受雾霾天气影响,某市决定当雾霾指数超过设定值时对车辆进行限行,假设车牌号全为数字,且长度不超过6位,限行规则如下:
(1)限行时间段只包括周一至周五,周六周日不限行;
(2)如果雾霾指数<200,不限行;
(3)如果200≤雾霾指数≤400,周1限行1和6,周2限行2和7,周3限行3和8,周4限行4和9,周5限行5和0;
(4)如果雾霾指数≥400,每天限行五个尾号的汽车,周1、3、5限行1,3,5,7,9,周2、4限行0,2,4,6,8。
现在给出星期几、雾霾指数和车牌号(int),判断该车牌号是否限行。
输入说明
scanf(“%d %d %d”,&a,&b,&c),第一个整数表示星期几(1~7,1表示周一,2表示周二,依次类推,7表示周日),第二个整数表示雾霾指数(0~600),第三个整数表示车牌号,整数之间用空格分隔。
输出说明
printf(“%d yes”,c%10)
printf(“%d no”,c%10)
输出为两个部分,第一部分为车牌最后一位数字,第二部分为限行情况,限行输出yes,不限行输出no。
输入样例
输入样例1
4 230 80801
输入样例2
3 300 67008
输出样例
输出样例1
1 no
输出样例2
8 yes
#include <stdio.h>
int main(){
int week, index, car;
scanf("%d %d %d", &week, &index, &car);
if(index<200){
printf("%d no", car%10);
}
if(200<=index && index<400){
if((week==1 && ((car%10)==1 || (car%10)==6)) || (week==2 && ((car%10)==2 || (car%10)==7)) || (week==3 && ((car%10)==3 || (car%10)==8)) || (week==4 && ((car%10)==4 || (car%10)==9)) || (week==5 && ((car%10)==5 || (car%10)==0))){
printf("%d yes", car%10);
}
else{
printf("%d no", car%10);
}
}
if(400<=index){
if((((week==1) || (week==3) || (week==5)) && ((car%10==1) || (car%10==3) || (car%10==5) || (car%10==7) || (car%10==9))) || (((week==2) || (week==4)) && ((car%10==0) || (car%10==2) || (car%10==4) || (car%10==6) || (car%10==8)))){
printf("%d yes", car%10);
}
else{
printf("%d no", car%10);
}
}
return 0;
}
9.计算球体质量
问题描述:
已知铁的比重是7.86(克/立方厘米),金的比重是19.3(克/立方厘米)。写一个程序,分别计算出给定直径的铁球与金球的质量,假定PI=3.1415926
输入说明:
输入两个整数,分别表示铁球与金球的直径(单位为毫米)
输出说明:
输出两个浮点数,分别表示铁球与金球的质量(单位为克),小数点后保留3位小数,两个浮点数之间用空格分隔
输入样例:
100 100
输出样例:
4115.486 10105.456
提示
用scanf输入,用printf输出,保留3位小数的格式控制字符为%.3f
#include <stdio.h>
int main(){
int t_d, j_d;
float t_m, j_m, Pl;
Pl=3.1415926;
scanf("%d %d", &t_d, &j_d);
t_m=Pl*t_d*t_d*t_d/6000.000*7.860;
j_m=Pl*j_d*j_d*j_d/6000.000*19.300;
printf("%.3f %.3f", t_m, j_m);
return 0;
}
10.温度转换
问题描述:
已知华氏温度到摄氏温度的转换公式为:摄氏温度= (华氏温度- 32)×5/9,写程序将给定的华氏温度转换为摄氏温度输出
输入说明:
只有一个整数,表示输入的华氏温度
输出说明:
输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入
输入样例:
50
输出样例:
10.00
提示:
用scanf输入,用printf输出,保留2位小数的格式控制字符为%.2f
#include <stdio.h>
int main(){
int f;
float c;
scanf("%d", &f);
c=5.0/9.0*(f-32);
printf("%.2f", c);
return 0;
}
11.整数简单运算
问题描述:
编写程序,计算用户输入的两个整数的和、差、乘积(*)和商(/)。
输入格式:
输入两个整数,整数之间用空格分隔。
输出格式:
输出四个整数结果,分别表示和、差、积和商,每输出一个结果换行。
输入样例:
3 4
输出样例:
7
-1
12
0
#include <stdio.h>
int main()
{
int a, b, sum, dif, pro, quo;//sum为和,dif为差,pro为积,quo为商
scanf("%d %d", &a, &b);
sum=a+b;
dif=a-b;
pro=a*b;
quo=a/b;
printf("%d\n", sum);
printf("%d\n", dif);
printf("%d\n", pro);
printf("%d\n", quo);
return 0;
}
15.A+B+C
问题描述:
通过键盘输入三个整数a,b,c,求3个整数之和。
输入说明:
三整形数据通过键盘输入,输入的数据介于-100000和100000之间,整数之间以空格、跳格或换行分隔。
输出说明:
输出3个数的和。
输入样例:
-6 0 39
输出样例:
33
#include <stdio.h>
int main(){
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("%d", a+b+c);
return 0;
}
16.字符输入输出
问题描述:
通过键盘输入5个大写字母,输出其对应的小写字母,并在末尾加上“!”。
输入说明:
5个大写字母通过键盘输入,字母之间以竖线“|”分隔。
输出说明:
输出5个大写字母对应的小写字母,之间无分隔,并在末尾加上‘!’。
输入样例:
H|E|L|L|O
输出样例:
hello!
#include<cstdio>
int main(){
char a1, a2, a3, a4, a5;
scanf("%c|%c|%c|%c|%c", &a1, &a2, &a3, &a4, &a5);
a1+=32;
a2+=32;
a3+=32;
a4+=32;
a5+=32;
printf("%c%c%c%c%c!", a1, a2, a3, a4, a5);
return 0;
}
18.数字字符
问题描述:
通过键盘输入1个整数a(0<=a<=4),1个数字字符b(’0’<=b<=’5’),求a+b。
输入说明:
整形数据、数字字符通过键盘输入,输入的整形数据介于0和4之间,输入的数字字符介于‘0’和‘5’之间,二个输入数之间用“,”分隔。
输出说明:
分别以整数形式及字符形式输出a+b,输出的二个数之间用“,”分隔。
输入样例:
3,5
输出样例:
56,8
#include <stdio.h>
int main(){
int a;
char b;
scanf("%d,%c", &a, &b);
printf("%d,%c", a+b, a+b);
return 0;
}
19.实数运算
问题描述:
通过键盘输入长方体的长、宽、高,求长方体的体积V(单精度)。
输入说明:
十进制形式输入长、宽、高,输入数据间用空格分隔。
输出说明:
单精度形式输出长方体体积V,保留小数点后3位,左对齐。
输入样例:
15 8.12 6.66
输出样例:
811.188
#include <stdio.h>
int main(){
float a, b, c, V;
scanf("%f %f %f", &a, &b, &c);
V=a*b*c;
printf("%.3f", V);
return 0;
}
20.四则运算
问题描述:
输入两个整数和一个四则运算符,根据运算符计算并输出其运算结果(和、差、积、商、余之一)。注意做整除及求余运算时,除数不能为零。
输入说明:
使用scanf()函数输入两个整数和一个运算符,格式见输入样例。
输出说明:
输出使用printf()函数,格式见输出样例。
输入样例:
5%2
输出样例:
5%2=1
#include <stdio.h>
int main(){
int a,b,x;
char c;
scanf("%d%c%d",&a,&c,&b);
if(c=='+'){
x=a+b;
}
if(c=='-'){
x=a-b;
}
if(c=='*'){
x=a*b;
}
if(c=='/'){
x=a/b;
}
if(c=='%'){
x=a%b;
}
printf("%d%c%d=%d",a,c,b,x);
return 0;
}
21.数位输出
问题描述:
输入一个5位整数,求出其各数位数值,并按照从高位到低位的顺序输出,如:输入12345,输出为1 2 3 4 5。
输入说明:
输入一个五位正整数。
输出说明:
按数位从高到低依次输出,各数位之间以一个空格相分隔。
输入样例:
96237
输出样例:
9 6 2 3 7
#include<stdio.h>
int main(){
int x, a, b, c, d, e;
scanf("%d", &x);
a = x/10000;
b = (x/1000)%10;
c = (x/100)%10;
d = (x/10)%10;
e = x%10;
printf("%d %d %d %d %d", a, b, c, d, e);
return 0;
}
27.阶梯电价1_分支结构
28.计算某月天数_分支结构
29.计算整数各位数字之和
30.完数
31.最大公约数
32.角谷定理
33.递归数列
问题描述
一个数列A定义如下:
A(1)=1,
A(2)=1/(1+A(1)),
A(3)=1/(1+A(2)),
……
A(n)=1/(1+A(n-1))。
定义一个函数function用来计算数列的第第n项的值,函数声明如下:
double function(int n);
输入说明
输入为1个正整数n,n<=10。
输出说明
函数输出数列A第n项的值,结果小数点后保留6位有效数字,多余部分四舍五入。
输入样例
5
输出样例
0.625000
提示
所有浮点数使用双精度浮点来运算!!!
#include <stdio.h>
#include <iostream>
using namespace std;
double function(int n){
if(n==1) return 1;
else return 1/(1+function(n-1));
}//答案仅需此段,其余为完整程序测试所用
int main(){
int n;
double result;
cin>>n;
result=function(n)*10*10*10*10*10*10/1/10/10/10/10/10/10;
printf("%.6lf", result);
return 0;
}
34.水仙数
35.歌德巴赫猜想
问题描述
有一种形式的Fibonacci数列定义如下:
F(0)=7,
F(1)=11,
F(n)=F(n-1)+F(n-2)(n>=2)。
按以下声明写一个函数fib
int fib(int n);
fib函数用来计算参数n对应的F(n),
fib(n)的返回值是F(n)。
输入说明
函数参数为一个整数n(0<=n<40)。
输出说明
函数返回值为整数,表示n对应的F(n)值。
输入样例
2
输出样例
18
#include <stdio.h>
int fib(int n){
if(n==0) return 7;
else if(n==1) return 11;
else return fib(n-1)+fib(n-2);
}//答案仅需此段,其余为完整程序测试所用
int main(){
int n;
scanf("%d", &n);
printf("%d", fib(n));
return 0;
}
36.矩阵
37.排序2
38.回文数
39.马鞍点
40.等差数列
41.PM2.5
42.整除判断1
问题描述
判断正整数a能否被b整数,如果不能整除,输出商和余数
输入说明
输入两个正整数a和b(0<a, b<=10000),a和b之间用空格分隔。
输出说明
如果a能被b整除,输出yes,否则在同一行输出a除以b的商和余数,商和余数之间用空格分隔
输入样例
17 7
输出样例
2 3
#include <stdio.h>
int main(){
int a, b, c, d;
scanf("%d %d", &a, &b);
if(a%b==0){
printf("yes");
}
else{
printf("%d %d", a/b, a%b);
}
return 0;
}
43.整数分析
44.斐波纳契数列素数判断
45.气温波动
46.折点计数
47.冰箱温度预测
问题描述
编写一个程序,用于预测冰箱断电后经过时间t(以小时为单位)后的温度T。已知计算公式如下所示
T=4t2/(t+2)-20
输入说明
输入两个整数h和m表示冰箱断电后经过的时间,h表示小时,m表示分钟
输出说明
输出冰箱断电后经过时间t(以小时为单位)后的温度T,保留两位小数
输入样例
2 0
输出样例
-16.00
#include <stdio.h>
int main(){
int h,m;
float T,t;
scanf("%d %d",&h,&m);
t=h+m/60.0;
T=(4.0*t*t)/(t+2.0)-20.0;
printf("%.2f",T);
return 0;
}
48.除法计算器
49.完全平方数
50.选号程序
[50~100]
51.寻找最大整数_分支结构
52.字符处理_分支结构
53.abc组合
53.成绩分级1_分支结构
55.数列求和
56.直角三角形判断_分支结构
57.Fibonacci数列
60.简单程序
输入说明
无
输出说明
用C程序输出以下两行文字
C programming language is useful!
I like it very much.
输入样例
无
输出样例
C programming language is useful!
I like it very much.
提示
使用printf输出即可
#include <stdio.h>
int main(){
printf("C programming language is useful!\nI like it very much.");
return 0;
}
63.工资计算_分支结构
64.自然数分解
65.数字处理
66.平均数
67.查找
68.日期计算
69.0-1矩阵
70.Z字形扫描
71.相邻区域
72.寻找最长的行
问题描述
寻找若干行文本中最长的一行
输入说明
输入为多个字符串(每个字符串长度不超过100个字符),每个字符串占一行,输入的行为“*** end ***”时表示输入结束
输出说明
输出其中最长的一行长度后换行再输出最长行的内容,如果最长行不止一个,则输出其中的第一行。
输入样例
abce
abdf dlfd
end
输出样例
9
abdf dlfd
#include <stdio.h>
#include <string.h>
int main(){
int n,max=0;
char a[100],b[100];
gets(a);
if(gets(a)!="***end***"){
n=strlen(a);
if(n>max){
max=n;
strcpy(b, a);
}
}
printf("%d\n%s", max, b);
return 0;
}
73.字符串压缩
问题描述
有一种简单的字符串压缩算法,对于字符串中连续出现的同一个英文字符,用该字符加上连续出现的次数来表示(连续出现次数小于3时不压缩)。
例如,字符串aaaaabbbabaaaaaaaaaaaaabbbb可压缩为a5b3aba13b4。
请设计一个程序,将采用该压缩方法得到的字符串解压缩,还原出原字符串并输出。
输入说明
输入数据为一个字符串(长度不大于50,只包含字母和数字),表示压缩后的字符串
输出说明
在一行上输出解压缩后的英文字符串(长度不超过100),最后换行。
输入样例
a5b3aba13b4
输出样例
aaaaabbbabaaaaaaaaaaaaabbbb
方法一(转载自字符串压缩-xdoj):
#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
int i, k, num;
char s[50], temp;
gets(s);
for (i = 0; i < strlen(s);) {
printf("%c", s[i]);
temp = s[i];
i++;
num = 0;
while (s[i] >= '0' && s[i] <= '9') {
num = num * 10 + (s[i] - '0');
i++;
}
for (k = 0; k < num - 1; k++) {
printf("%c", temp);
}
}
return 0;
}
方法二(我的方法):
我的方法代码多一倍,发现真相的我眼泪落下了……
#include <stdio.h>
#include <iostream>
#include <ctype.h>
using namespace std;
int main(){
char b='0', a[51]={'\0'}, alpha, str[101]={0};
cin>>a;
int i, j, jp, count=0, n;//jp=j_place
n=strlen(a);
for(i=0, j=0; i<n;){
if(isalpha(a[i])){
alpha=a[i];
str[j]=alpha;
i++;
j++;
jp=j;
}
if(isdigit(a[i])){
if(isdigit(a[i+1])){
count=(a[i]-'0')*10+(a[i+1]-'0');
i+=2;
for(j; j<=count+jp-2; j++){
str[j]=alpha;
}
}
else if(a[i]>='3' && a[i]<='9'){
count=a[i]-'0';
i++;
for(j; j<=count+jp-2; j++){
str[j]=alpha;
}
}
else{
for(j; j<=j;){
str[j]=alpha;
i++;
j++;
}
}
}
}
cout<<str<<endl;
return 0;
}
75.灰度直方图
问题描述
一幅m×n的灰度图像可以用一个二维矩阵表示,矩阵中的每个元素表示对应像素的灰度值。灰度直方图表示图像中具有每种灰度级的象素的个数,反映图像中每种灰度出现的频率。
假设图像灰度为16级(灰度值从0-15),现给出一个矩阵表示的灰度图像,输出各级灰度的像素个数。
输入说明
输入数据第一行为两个整数m 和n分别表示图像的宽度和高度(0<=m,n<=256),其后是n行数据,每行m个整数,分别表示图像各个像素的灰度值。
输出说明
输出n行数据,每行数据由两个整数组成,分别表示灰度级和该灰度级像素个数,整数之间用空格分隔,灰度级输出顺序为从低到高,如果某灰度级像素个数为0,则不输出该灰度级的统计结果。
输入样例
5 4
0 1 0 2 8
3 4 8 5 9
12 14 10 6 7
1 15 3 6 10
输出样例
0 2
1 2
2 1
3 2
4 1
5 1
6 2
7 1
8 2
9 1
10 2
12 1
14 1
15 1
#include <stdio.h>
int main(){
int m, n, i, j;
scanf("%d %d", &m, &n);
int a[m][n], b[16] = {0}, sum = 0, p;
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
scanf("%d", &a[i][j]);
}
}
for(p = 0; p < 16; p++){
for(i = 0; i < m; i++){
for(j = 0; j < n; j++){
if(a[i][j] == p) sum++;
}
}
b[p] = sum;
sum = 0;
if(b[p] != 0) printf("%d %d\n", p, b[p]);
}
return 0;
}
76.统计正整数的个数
79.求平均值
题目描述:
计算三个整数的平均值,结果保留两位小数。
输入格式:
共一行,包含三个整数,整数之间用空格分隔。
输出格式:
共一行,输出平均值,结果保留两位小数。
输入示例:
20 42 55
输出示例:
39.00
#include <stdio.h>
int main(){
int a, b, c;
float x;
scanf("%d %d %d", &a, &b, &c);
printf("%.2f", (a+b+c)/3.00);
return 0;
}
80.字符统计
问题描述
给出一个字符C和一行文字S,统计在这行文字S中字符C出现的次数。
程序还需要支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入说明
输入数据由两行构成。
第一行包含一个字符C和一个数字n。字符C为大小或小写英文字母。数字n表示大小写敏感选项,当数字n为0时表示大小写不敏感,当数字n为1时表示大小写敏感。字符C和数字n之间用空格分隔。
第二行为一个字符串S,字符串由大小写英文字母组成,不含空格和其他字符。字符串S长度不超过100。
输出说明
输出字符C在字符串S中出现的次数。
输入样例
样例1输入
L 1
HELLOWorld
样例2输入
L 0
HELLOWorld
输出样例
样例1输出
2
样例2输出
3
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int main() {
char c;
int n;
std::string s;
cin >> c >> n;
cin >> s;
if (n == 0) {
c = tolower(c);
for (int i = 0; i < s.length(); i++) {
s[i] = tolower(s[i]);
}
}
int count = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == c)
count++;
}
cout << count;
return 0;
}
81.字符串查找
问题描述
给出一个字符串和多行文字,输出在这些文字中出现了指定字符串的行。
程序还需要支持大小写敏感选项:
当选项打开时,表示同一个字母的大写和小写看作不同的字符;
当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
输入说明
输入数据第一行包含一个字符串s,由大小写英文字母组成,长度不超过100。
第二行包含一个数字,表示大小写敏感选项。当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
第三行包含一个整数n,表示给出的文字行数。
接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。每个字符串长度不超过100。
输出说明
输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串s的行。
输入样例
Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello
输出样例
HelloWorld
HiHiHelloHiHi
HELLOisNOTHello
#include<stdio.h>
#include<string.h>
int main(){
char str[10000][100], copy[10000][100];
char str0[100], str1[100];
int i, j, n, sense;
scanf("%s", str0);
scanf("%d %d", &sense, &n);
for(i=0;i<n;i++){
scanf("%s", str[i]);
}
if(!sense){
strcpy(str1, str0);
for(j=0; j<strlen(str1); j++){
if(str1[j]>='A' && str1[j]<='Z')str1[j]+=32;
}
for(i=0; i<n; i++)strcpy(copy[i], str[i]);
for(i=0; i<n; i++){
for(j=0; j<strlen(copy[i]); j++){
if(copy[i][j]>='A' && copy[i][j]<='Z')copy[i][j]+=32;
}
}
for(i=0; i<n; i++){
if(strstr(copy[i], str1)!=NULL) puts(str[i]);
}
}
else {
for(i=0; i<n; i++){
if(strstr(str[i], str0)!=NULL) puts(str[i]);
}
}
return 0;
}
82.密码强度
83.图像旋转
84.目录操作
问题描述
在操作系统中,文件系统一般采用层次化的组织形式,由目录(或者文件夹)和文件构成,形成一棵树的形状。
有一个特殊的目录被称为根目录,是整个文件系统形成的这棵树的根节点,在类Linux系统中用一个单独的 “/”符号表示。
因此一个目录的绝对路径可以表示为“/d2/d3”这样的形式。
当前目录表示用户目前正在工作的目录。为了切换到文件系统中的某个目录,可以使用“cd”命令。
假设当前目录为“/d2/d3”,下图给出了cd命令的几种形式,以及执行命令之后的当前目录。
现在给出初始时的当前目录和一系列目录操作指令,请给出操作完成后的当前目录。
输入说明
第一行包含一个字符串,表示当前目录。
后续若干行,每行包含一个字符串,表示需要进行的目录切换命令。
最后一行为pwd命令,表示输出当前目录
注意:
- 所有目录的名字只包含小写字母和数字,cd命令和pwd命令也都是小写。最长目录长度不超过200个字符。
- 当前目录已经是根目录时,cd … 和cd /不会产生任何作用
输出说明
输出一个字符串,表示经过一系列目录操作后的当前目录
输入样例
/d2/d3/d7
cd. .(两个“.”中间没有空格,由于Markdown编辑器语法限制只能备注)
cd /
cd /d1/d6
cd d4/d5
pwd
输出样例
/d1/d6/d4/d5
#include<stdio.h>
#include<string.h>
int main(){
char a[201], b[201];
gets(a);
int i, j;
while(1){
gets(b);
if(strcmp(b, "pwd")==0) break;
else{
if(strcmp(b, "cd /")==0){
strcpy(a, "/");
}
else if(b[4]=='.'){
if(strcmp(a, "/")!=0){
for(i=strlen(a)-1; i>=0; i--){
if(a[i]!='/') a[i]=0;
else if(a[i]=='/' && strlen(a)>1){
a[i]=0;
break;
}
}
}
}
else if(b[3]=='/' && b[4]!=0){
for(i=0; i<strlen(a); i++)
a[i]=1;
for(i=3; b[i]!='\0'; i++){
a[i-3]=b[i];
}
a[i+4]=0;
}
else{
if(strcmp(a, "/")==0){
j=1;
for(i=3; b[i]!='\0'; i++, j++){
a[j]=b[i];
}
a[j]='\0';
}
else{
i=strlen(a);
a[i]='/';
i++;
for(j=3; b[j]!='\0'; i++, j++){
a[i]=b[j];
}
a[++i]='\0';
}
}
}
}
puts(a);
return 0;
}
85.字符串相似度
问题描述
最长公共子串指给定的两个字符串之间最长的相同子字符串(忽略大小写),最长公共子串长度可用来定义字符串相似度。
现给出两个字符串S1和S2,S1的长度为Len1,S2的长度为Len2,假设S1和S2的最长公共子串长度为LCS,则两个字符串的相似度定义为2LCS/(Len1+Len2)。
例如:S1=”App”,S2=”apple”,S1长度为3,S2长度为5,它们的最长公共子串为”App”,长度为3,则相似度为23/(3+5)=0.75。
现给出两个字符串,请计算它们的相似度结果保留3位小数。
输入说明
输入为两行,分别表示两个字符串S1和S2,每个字符串长度不超过100个字符,所有字符均为可打印字符,包括大小写字母,标点符号和空格。
输出说明
输出两个字符串的相似度,结果四舍五入保留3位小数。
输入样例
App
Apple
输出样例
0.750
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
char s1[101], s2[101], t[101];
int i, j;
float len1, len2, max=0;
int a[100][100]={0};
float similar;
gets(s1);
gets(s2);
len1=strlen(s1);
len2=strlen(s2);
for(i=0; i<len1; i++){
for(j=0; j<len2; j++){
if(s1[i]==s2[j]||abs(s1[i]-s2[j])==32){
if(i!=0 && j!=0)
a[i][j]=a[i-1][j-1]+1;
else a[i][j]=1;
}
}
}
for(i=0; i<len1; i++){
for(j=0; j<len2; j++){
if(a[i][j]>max) max=a[i][j];
}
}
similar=2.0*max/(len1+len2);
printf("%.3f", similar);
return 0;
}
86.画图
问题描述
在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形,指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。
下图给出了一个画了两个矩形的例子。第一个矩形是(1,1) 到(4, 4),用绿色和紫色表示。第二个矩形是(2, 3)到(6, 5),用蓝色和紫色表示。
图中,一共有15个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形 都涂成统一的颜色,图中显示不同颜色仅为说明方便。给出所有要画的矩形,请问总共有多少个单位的面积被涂上颜色。
输入说明
输入的第一行包含一个整数n,表示要画的矩形的个数,1<=n<=100。
接下来n行,每行4个非负整数,分别表示要画的矩形的左下角的横坐标与纵坐标,以及右上角的横坐标与纵坐标。0<=横坐标、纵坐标<=100。
输出说明
输出一个整数,表示有多少个单位的面积被涂上颜色。
输入样例
2
1 1 4 4
2 3 6 5
输出样例
15
在这里插入代码片
87.跳一跳
88.ISBN号码
题目描述:
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如 “x-xxx-xxxxx-x” ,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如 0-670-82162-4 就是一个标准的ISBN码。
ISBN码的首位数字表示书籍的出版语言,例如 0 代表英语;
第一个分隔符 “-” 之后的三位数字代表出版社,例如 670 代表维京出版社;
第二个分隔之后的五位数字代表该书在出版社的编号;
最后一位为识别码。识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。
例如ISBN号码 0-670-82162-4 中的识别码 4 是这样得到的:
对 067082162 这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取 158 mod (即%取余)11 的结果 4 作为识别码。
编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出 “Right” ;如果错误,则输出正确的ISBN号码。
输入格式:
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出格式:
输出一行,假如输入的ISBN号码的识别码正确,那么输出 “Right” ,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符 “-” )。
示例:
样例输入1
0-670-82162-4
样例输入2
0-670-82162-0
输出样例
样例输出1
Right
样例输出2
0-670-82162-4
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, num = 0;
char s[11] = {'0'};
for(i = 0; i < 10;){
s[i] = getchar();
if(s[i] != '-') i++;
}/*这里我最开始写的代码出错了一直找不到原因
初始错误代码:
while(getchar() != '-'){
for(i = 0; i < 10; i++){
s[i] = getchar();
}
}
运行时发现按回车键没有用,调试时发现卡在 while 那里一直不往下走,问了同学才知道 while 括号里的 getchar() 和
for 循环里的 getchar() 读取的分别是第一个键入和第二个键入……*/
for(i = 0; i < 9; i++){
num += (s[i] - '0') * (i + 1);
}
num %= 11;
if(num == (s[9] - '0'))
printf("Right");
else printf("%c-%c%c%c-%c%c%c%c%c-%d", s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], num);
return 0;
}
89.计算球的体积
题目描述:
输入球的半径,计算并输出球的体积,假定pi=3.14,结果保留两位小数。
输入格式:
共一行,输入球体半径,两位小数。
输出格式:
共一行,输出球体体积,结果保留两位小数。
示例:
输入:5.50
输出:696.56
#include <stdio.h>
int main(){
float r, pi, v;
pi=3.14;
scanf("%f", &r);
printf("%.2f", 4.00/3.00*pi*r*r*r);
return 0;
}
90.求三位整数各位之和
题目描述:
输入一个三位数整数,求其百位、十位和个位数字之和。
输入格式:
共一行,输入一个三位整数。
输出格式:
共一行,输出一个整数。
示例:
输入:128
输出:11
#include <stdio.h>
int main(){
int x, y;
scanf("%d", &x);
printf("%d", x/100+x/10%10+x%10);
return 0;
}
91.求三角形面积
题目描述:
输入三角形的三边长,计算三角形的面积,结果保留两位小数。
边长分别为a,b,c,三角形的面积公式为s=sqrt(p(p-a)(p-b)(p-c)),其中p=(a+b+c)/2。
输入格式:
共一行,输入三个数,保留两位小数,用空格隔开各个数据。
输出格式:
共一行,输出面积,结果保留两位小数。
示例:
输入:3.00 4.00 5.00
输出:6.00
#include <stdio.h>
#include <math.h>
int main(){
float a, b, c, p;
scanf ("%f %f %f", &a, &b, &c);
p=(a+b+c)/2.00;
printf("%.2f", pow(p*(p-a)*(p-b)*(p-c), 0.50));
return 0;
}
92.工资发放
题目描述:
公司财务要发工资现金,需要提前换取100元、50元、20元、10元、5元和1元的人民币,请输入工资数,计算张数最少情况下,各自需要多少张。
输入格式:
共一行,输入一个正整数。
输出格式:
共一行,分别是100、50、20、10、5、1元面额的张数,用空格隔开各个数据。
示例:
输入:1258
输出:12 1 0 0 1
#include <stdio.h>
int main(){
int n, a, b, c, d, e, f, x;
scanf("%d", n);
a=n/100;
x=n%100;
if(x>=50) b=1;
else b=0;
}
93.整数比较1_分支结构
94.整数比较2分支结构
97.输出26个英文字母
98.成绩分级2_分支结构
99.阶梯电价2_分支结构
100.三角形判别
描述
已知三角形任意两边之和大于第三边,给出三个正整数a,b,c,,请判断能否构成一个三角形,并输出相应结果。
输入说明
输入数据为同一行上的3个整数a,b,c(0 < a,b,c < 1000),整数之间用空格分隔。
输出说明
如果输入的三个整数能够构成一个三角形,输出该三角形周长,否则输出No
输入样例1
3 3 2
输入样例2
1 1 5
输出样例1
8
输出样例2
No
提示
能够构成一个三角形,输出该三角形周长,否则输出No
#include <stdio.h>
int main(){
int a, b, c, l;
scanf("%d %d %d", &a, &b, &c);
if(a+b>c && a+c>b && b+c>a)
printf("%d", a+b+c);
else
printf("No");
return 0;
}
[101~150]
101.四位密码器
110.判断奇偶性
题目描述:
编写程序:输入一个正整数,判断该数的奇偶性,输出判断的结果(偶数/奇数)。
输入格式:
输入一个正整数。
输出格式:
输出“偶数”或“奇数”。
示例:
输入:5
输出:奇数
#include<stdio.h>
int main(){
int a;
if(a%2==0)
printf("偶数");
else
printf("奇数");
return 0;
}
111.整除判断2
题目描述:
编写程序,输入一个正整数,判断是否能被5和7同时整除,若可以,则输出yes;否则输出no。
输入格式:
输入一个正整数。
输出格式:
输出“yes”或“no”。
示例:
输入:35
输出:yes
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
if(a%5==0 && a%7==0)
printf("yes");
else
printf("no");
return 0;
}
112.分段函数1_分支结构
113.出租车计价
116.阶梯电价控制
125.利率计算
问题描述:
假如我国国民生产总值的年增长率为9%,计算10年后我国国民总值与现在相比增长多少百分比。计算公式为p=(1+r)n,r为增长率,n为年数,p为与现在相比的倍数。
输入说明:
输入两个浮点数,分别表示年增长率和年数,两个浮点数之间用空格分隔。
输出说明:
输出一个浮点数,表示与现在相比的倍数,小数点后保留2位小数。
输入样例:
0.09 10
输出样例:
2.37
#include <stdio.h>
#include <math.h>
int main(){
float r, n, p;//r为增长率,n为年数,p为与现在相比的倍数
scanf("%f %f", &r, &n);
p=pow((1+r), n);
printf("%.2f", p);
return 0;
}
126.购房贷款计算
问题描述:
购房从银行贷了一笔款d,准备每月还款额为P,月利率为r,计算多少月能还清。(设d为300000元,p为6000元,r为1%,对求得的月份取小数点后一位,对第2位按四舍五入处理)
提示:
计算还清月数m的公式如下:
也可以将公式改写为:
输入说明:
输入三个浮点数,分别表示贷款,每月还款额与月利率,三个浮点数之间用空格分隔。
输出说明:
输出以个浮点数,表示还清贷款的月数,小数点后保留2位小数。
输入样例:
300000 6000 0.01
输出样例:
69.66
#include <stdio.h>
#include <math.h>
int main(){
float d, p, r, m;//d为贷款,p为还款,r为月利率,m为月数
scanf("%f %f %f", &d, &p, &r);
m=log(p/(p-d*r))/log(1+r);
printf("%.2f", m);
return 0;
}
139.字符加密
问题描述:
请编程序将“China”译成密码,密码规律是:用原来字母后面第四个字母代替原来的字母。例如“A”后面的第四个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。
输入说明:
用赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为‘C’,‘h’,‘i’,‘n’,‘a’,字符之间以空格分隔。
输出说明:
经过运算,使c1,c2,c3,c4,c5分别变成‘G’,‘l’,‘m’,‘r’,‘e’。用printf函数输出这五个字符
输入样例:
C h i n a
输出样例:
Glmre
#include <stdio.h>
int main(){
char c1, c2, c3, c4, c5;
scanf("%c %c %c %c %c", &c1, &c2, &c3, &c4, &c5);
printf("%c%c%c%c%c", c1+4, c2+4, c3+4, c4+4, c5+4);
return 0;
}
146.英文表示数字_分支结构
147.求奇数的和
149.求交错序列前N项和
150.分段函数2_分支结构
[151~200]
151.利润计算_分支结构
155.阶乘之和—双层循环
156.数字个数统计
157.自然数求和
159.阶乘运算
161.数字个数统计2
162.矩阵相乘
163.数值求和—二维数组练习
164.转换排序—数组中的元素排序练习
165.最值位置—数组数列元素查询练习
176.中间数
177.累加和校验
183.最大公约数和最小公倍数
185.迭代法求根
189.小球下落问题
190.矩阵对角线求和
191.密码编译
192.数组逆序排列
193.歌唱比赛
196.输出金字塔
200.数组元素平移
[201~250]
201.后项除以前项
204.单词统计—字符数组练习
205.金字塔打印
206.字符删除—字符数组练习
207.单词排序—字符数组练习
215.字符逆序排放
219.素数判断
221.字符串元素统计
227.字符串查找
228.字符串筛选
229.字符串连接
230.调用函数求素数
240.整数转换为字符串
241.十六进制转换为十进制
244.单词排序
题目描述:
定义一个二维字符数组str[10][20],行号表示单词序号,列号表示单词最大长度,输入一个正整数N(N≤10),表示单词数,使用函数wd_sort()完成单词的排序,按字母顺序从小到大排列单词
输入描述:
输入一个正整数N和一个二维字符数组str,字母为小写,行号表示单词序号,列号表示单词最大长度。
输出描述:
格式输出:排序后的单词之间用换行分隔。
输入样例:
3
word
fish
egg
输出样例:
egg
fish
word
提示:
使用strcmp()、strcpy()和strlen()函数,头文件string.h。
#include<stdio.h>
#include<string.h>
int main(){
char str[10][20];
char trans[100];
int i, j, n, t;
scanf("%d", &n);
for(i=0; i<n; i++){
scanf("%s", &str[i]);
}
for(i=0; i<n; i++){
for(j=0; j<n-1; j++){
if(strcmp(str[j], str[j+1])>0){
for(t=0; t<20; t++)
trans[t]=str[j][t];
for(t=0; t<20; t++)
str[j][t]=str[j+1][t];
for(t=0; t<20; t++)
str[j+1][t]=trans[t];
}
}
}
for(i=0; i<n; i++){
puts(str[i]);
printf("\n");
}
return 0;
}
249.分解质因数
[251~300]
298.最大值与最小值_分支结构
299.奖金计算_分支结构
300.位数判断
[301~350]
301.亲和数
302.质数求和
[351~400]
374.课堂练习-沸水降温曲线
描述:
沸腾的水(100℃)在室温下温度随时间变化的曲线如图所示,给出时间,计算
水的温度
文章来源:https://www.toymoban.com/news/detail-738756.html
输入:
第一行为两个整数 m(m[0,100]),s(s∈[0,59]),分别表示降温时间的分钟数和秒数
输出:
输出一个小数,表示输入时间对应的水的温度,温度保留 1 位小数。
输入样例:
5 30
输出样例:
72.5文章来源地址https://www.toymoban.com/news/detail-738756.html
#include<stdio.h>
int main(){
int m,s;
float t,c;
scanf("%d%d", &m, &s);
t = m+(s*1.0/60);
if(t>=0 && t<=10){
c = 100-5*t;
}
else if(t>10 && t<=30){
c = 50-(t-10);
}
else if(t>30 && t<=50){
c = 30-((t-30)*1.0)/2;
}
else{
c = 20;
}
printf("%.1f", c);
return 0;
}
375.课堂练习题2-温度统计
378.正整数的最优分解
381.小中大
382.图像旋转-2021
384.种苹果
385.报数游戏
到了这里,关于[XDOJ]日常作业汇总(不定时更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!