A. 落地反弹(循环)
一球从某一初始高度h(米)自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?
(注:中间的每次计算结果都要四舍五入保留小数点后2位,
例如:x是浮点类型(float),可以用x=(int)((x*1000+5)/10) / 100.0 来实现上述功能)
输入
球的初始高度h和落地次数n
输出
第n次落地时共经过的距离(米)和第n次反弹会有多高(米)
#include <stdio.h>
int main()
{
float h,x,y;
int n,i;
scanf("%f%d",&h,&n);
for(i=1,x=h;i<=n;i++)
{
x=x/2;
if(x==h/2)
y=h;
else
y=y+4*x;
x=(int)((x*1000+5)/10)/100.0;
y=(int)((y*1000+5)/10)/100.0;
}
printf("%.2f\n",y);
printf("%.2f",x);
}
B. 素数和(循环)
输入数字范围n,m(n>=0, m>=0, n<=m),输出[n,m]区间中的所有素数和。
输入
测试次数T
每组测试数据一行,数字范围n m
输出
对每组测试数据,如果有素数,输出二行:
第一行:输出[n,m]间的素数
第二行:输出[n,m]间的素数和
如果没有素数,输出NO
#include <stdio.h>
#include <math.h>
int main()
{
int t,n,m;//次数,区间数
int i,j,k;//循环变量
int sum,num;//素数和
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d%d",&n,&m);
sum=0;
for(j=n;j<=m;j++)
{
if(j>=2)//排除1,2
{
num=0;//判断有没有素数
for(k=2;k<=sqrt(j);k++)//判断j是不是
{
if(j%k==0)
{
num=1;break;
}
}
if(num==0)
{
printf("%d ",j);
sum=sum+j;
}
}
}
if(sum==0)
printf("NO\n");
else
printf("\n%d\n",sum);
}
}
C. 打印漏斗
打印出一个底部有n个*的漏斗
输入
第一行输入一个T;表示有T组测试数据
下面每一行都有一个n表示漏斗底部*的个数
n保证是奇数
输出
输出打印结果
两个测试答案之间要用换行分割
#include <stdio.h>
#include <stdlib.h>
int main()
{
int T,n;//测试参数,底部*个数
int size1,size2;//*个数和空格个数
scanf("%d",&T);
for(int i=0;i<T;i++)//判断执行参数是否到达T次
{
scanf("%d",&n);
if(n%2==0) exit(-1);//判断n是否为偶数
for(int i=1;i<=n;i++)
{
if(i<=(n+1)/2) size1=n-(i-1)*2;
else size1=1+2*(i-(n+1)/2);
size2=(n-size1)/2;//确定两种符号的个数
for(int i=0;i<size2;i++) printf(" ");
for(int i=0;i<size1;i++) printf("*");
printf("\n");
}printf("\n");
}
}
A. 数字直角
给出n,请输出一个直角边长度是n的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。
n<=13
输入
输出
#include<stdio.h>
int main()
{
int n,k=1,m;
scanf("%d",&n);
m=n;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%02d",k);
k++;
}printf("\n");
--m;
}
}
B. 五位以内的对称素数(循环)
判断一个数是否为对称且不大于五位数的素数。
意思是小于100,000的数
输入
第一行:测试数据组数T
接下来包含T行,每行由1个不大于五位数的正整数构成。
输出
对于每个正整数,如果该数是不大于五位数的对称素数,则输出”Yes”,否则输出”No”,每个判断结果单独列一行。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int t;
int a,b,c;
int flaga,flagb,flagc;
scanf("%d",&t);
for(int i=1;i<=t;i++){
scanf("%d",&a);
flaga=0;
if(a>=100000||a<10)//判断有没有超五位
{
printf("No\n");
flaga=1;
}
if(flaga==1) continue;
flagb=0;
c=a;b=0;
while(c){//判断是不是对称数
b=b*10+c%10;
c/=10;
}
if(a!=b){
printf("No\n");
flagb=1;
}
if(flagb==1) continue;
flagc=0;
for(int j=2;j<=(int)sqrt(a);j++){//判断是不是素数
if(a%j==0){
flagc=1;}
}
if(flagc==1) printf("No\n");
if(flagc==1) continue;
printf("Yes\n");
}
}
C. 质数因子(循环)
p { margin-bottom: 0.21cm; }
输入一个正整数,求它可由哪些质数因子相乘构成(如180的质数因子为2、2、3、3、5)
输入
正整数n
输出
相乘为n 的所有的质因数
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int n,a,b;
scanf("%d",&n);
for(a=2;a<=sqrt(n);a++)
{
for(;n%a==0;)//多次输出a
{
n=n/a;
printf("%d ",a);
}
}
if(n!=1)
printf("%d",n);
}
D. 砖石奖励(循环)
海盗们决定用“投环套物”的方式来奖励最近一次行动中贡献最大的人。他们将1克拉钻石排成矩阵,通过投掷圆环决定奖励的钻石的数量。假设每个钻石的x和y坐标都是0到99的整数,输入矩阵长、宽及圆形,计算这个人能获得多少克拉的钻石。
输入
测试次数
每组测试数据包含两行,第一行为矩阵的行数和列数,第二行为圆心坐标点及半径。
输出
对每组测试数据,输出圆形内的钻石克拉数(包括边界上的钻石)。
#include<stdio.h>
#include<math.h>
int main()
{
int t;
float m,n,x,y,r;
int sum;
scanf("%d",&t);
for(int i=1;i<=t;i++){//处理多组数据
sum=0;
scanf("%f%f",&m,&n);
scanf("%f%f%f",&x,&y,&r);
for(int j=0;j<=n;j++){//从y轴开始直到矩形右边界
for(int k=0;k<=m;k++)//从x轴开始直到矩形上边界
if(r>=(float)sqrt((j-x)*(j-x)+(k-y)*(k-y)))
sum+=1;
}
printf("%d\n",sum);
}
}
E. 车牌号(循环)
一卡车违反交通规则,撞人逃逸。三人目击事件,没有记住车号,但记下车的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙说:四位的车号正好是一个整数的平方。请根据以上线索求出车号。
输入
输入n(0<n<5)
输出
输出车牌号的第n位(1对应个位,2对应十位,3对应百位,4对应千位)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int a,b,t,flag;
int n;
scanf("%d",&t);
for(a=1;a<=9;a++){
for(b=0;b<=9;b++){
flag=0;
n=a*1000+a*100+b*10+b;
if(sqrt(n)==(int)sqrt(n)){
flag=1;
break;}
}
if(flag==1) break;
}
switch(t){
case 1:
case 2:printf("%d",b);break;
case 3:
case 4:printf("%d",a);break;
}
}
F. 迭代法求平方根(循环)
用迭代法求 。求a的平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数
输入
X
输出
X的平方根
#include<stdio.h>
#include<math.h>
int main()
{
float x1, x2;
float a;
scanf("%f",&a);
x2=1.0;
for(;;)
{
x1=x2;
x2=(x1+a/x1)/2.0;
if (fabs(x1 - x2)<0.00001)
{
printf("%.3f",x2);
break;
}
}
return 0 ;
}