1.小鱼比可爱
题目描述
人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。
输入格式
第一行输入一个正整数n,表示鱼的数目。
第二行内输入 n个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度 ai。
输出格式
一行,输出 n 个整数,用空格间隔,依次表示每只小鱼眼中有多少只鱼不如自己可爱。
#include <stdio.h>
int main(){
int n,a[100];
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
getchar();
int count=0;
for(int j=0;j<i;j++){
if(a[j]<a[i])count++;
}
printf("%d ",count);
}
return 0;
}
样例输入 #1
6
4 3 0 5 1 2
样例输出 #1
0 0 0 3 1 2
提示
对于 100%的数据,1 <=n<=100,0 <=ai <=10。
2.小鱼的数字游戏
题目描述
小鱼最近被要求参加一个数字游戏,要求它把看到的一串数字ai(长度不一定,以 0结束),记住了然后反着念出来(表示结束的数字0 就不要念出来了)。这对小鱼的那点记忆力来说实在是太难了,你也不想想小鱼的整个脑袋才多大,其中一部分还是好吃的肉!所以请你帮小鱼编程解决这个问题。
输入格式
一行内输入一串整数,以0结束,以空格间隔。
输出格式
一行内倒着输出这一串整数,以空格间隔。
#include <stdio.h>
int main(){
int a[100]={
1},i=-1;
do{
i++;
scanf("%d",&a[i]);
getchar();
}while(a[i]!=0);
for(int j=i-1;j>=0;j--){
printf("%d ",a[j]);
}
return 0;
}
样例输入 #1
3 65 23 5 34 1 30 0
样例输出 #1
30 1 34 5 23 65 3
提示
对于100% 的数据,保证 0 <= ai <= 2^{31} - 1,数字个数不超过 100。
3.冰雹猜想
题目描述
给出一个正整数 n,然后对这个数字一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以2。经过若干次循环后,最终都会回到1。经过验证很大的数字(7*10^{11})都可以按照这样的方式比变成1,所以被称为“冰雹猜想”。例如当n 是 20,变化的过程是20->10->5->16->8-> 4-> 2-> 1 。
根据给定的数字,验证这个猜想,并从最后的 1开始,倒序输出整个变化序列。
输入格式
输入一个正整数 n。
输出格式
输出若干个由空格隔开的正整数,表示从最后的1 开始倒序的变化数列。
#include <stdio.h>
int main(){
int n,i=0;
int a[200];
scanf("%d",&n);
while(n!=1){
a[i++]=n;
if(n%2==0){
n/=2;
}else n=n*3+1;
}
a[i]=1;
for(;i>=0;i--){
printf("%d ",a[i]);
}
return 0;
}
样例输入 #1
20
样例输出 #1
1 2 4 8 16 5 10 20
提示
数据保证,1 <= n<=100。
4.校门外的树
题目描述
某校大门外长度为1 的马路上有一排树,每两棵相邻的树之间的间隔都是1 米。我们可以把马路看成一个数轴,马路的一端在数轴 0的位置,另一端在1 的位置;数轴上的每个整数点,即 0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数,分别表示马路的长度1 和区域的数目 m。
接下来m 行,每行两个整数 u, v,表示一个区域的起始点和终止点的坐标。
输出格式
输出一行一个整数,表示将这些树都移走后,马路上剩余的树木数量。
#include <stdio.h>
int main(){
int l,m,u,v,flag[10010]={
0};
scanf("%d %d",&l,&m);
l+=1;
for(int i=0;i<m;i++){
scanf("%d %d",&u,&v);
for(int j=u;j<=v;j++){
if(flag[j]==0){
flag[j]=1;
l--;
}
}
}
printf("%d",l);
return 0;
}
样例输入 #1
500 3
150 300
100 200
470 471
样例输出 #1
298
提示
对于100% 的数据,保证 1 <= l <= 10^4,1 <= m <= 100,0 <= u <= v <= l。
5.旗鼓相当的对手
题目描述
现有N名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 150 的自然数)。如果某对学生<i,j>的每一科成绩的分差都不大于5,且总分分差不大于10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
输入格式
第一行一个正整数N。
接下来N行,每行三个整数,其中第i行表示第i名同学的语文、数学、英语成绩。最先读入的同学编号为 1。
输出格式
输出一个整数,表示“旗鼓相当的对手”的对数。
#include <stdio.h>
#include <math.h>
int main(){
int n,score[1000][4],i,j,count=0;
scanf("%d",&n);
for(i=0;i<n;i++){
int all=0;
for(j=0;j<3;j++){
scanf("%d",&score[i][j]);
all+=score[i][j]; //算出三门成绩的总分
}
score[i][j]=all;
}
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
for(int k=0;k<3;k++){
//3门成绩+1总分 比较
if(abs(score[i][k]-score[j][k])>5||abs(score[i][3]-score[j][3])>10)break;
if(k==2)count++;
}
}
}
printf("%d",count);
return 0;
}
样例输入 #1
3
90 90 90
85 95 90
80 100 91
样例输出 #1
2
提示
数据保证,2<=N<=1000且每科成绩为不超过 150的自然数。
6.工艺品制作
题目描述
现有一个长宽高分别为w,x,h组成的实心玻璃立方体,可以认为是由1×1×1的数个小方块组成的,每个小方块都有一个坐标 ( i,j,k )。现在需要进行q次切割。每次切割给出(x1,y1,z1),(x2,y2,z2)这 6 个参数,保证x1<=x2,y1<=y2,z1<=z2;每次切割时,使用激光工具切出一个立方体空洞,空洞的壁平行于立方体的面,空洞的对角点就是给出的切割参数的两个点。
换句话说,所有满足 x1<=i<=x2,y1<=j <=y2,z1<=k<=z2的小方块(i,j,k)的点都会被激光蒸发。例如有一个 4×4×4的大方块,其体积为64;给出参数(1,1,1),(2,2,2)时,中间的8块小方块就会被蒸发,剩下56个小方块。现在想知道经过所有切割操作后,剩下的工艺品还剩下多少格小方块的体积?
输入格式
第一行三个正整数w,x,h。
第二行一个正整数q。
接下来q行,每行六个c整数(x1,y1,z1),(x2,y2,z2)。
输出格式
输出一个整数表示答案。
#include <stdio.h>
int main(){
int w,x,h,count=0,flag[21][21][21]={
0};
scanf("%d %d %d",&w,&x,&h);
int q;
scanf("%d",&q);
while(q--){
//每一次切割
int x1,y1,z1,x2,y2,z2;
scanf("%d %d %d %d %d %d",&x1,&y1,&z1,&x2,&y2,&z2);
for(int i=x1;i<=x2;i++){
for(int j=y1;j<=y2;j++){
for(int k=z1;k<=z2;k++){
//坐标i,j,k
if(flag[i][j][k]==0){
count++<