发布文章安排以及目的:
我会抽时间发文章的,看时间安排了,现在时间有点紧吧。马上过年了。过完年要开始准备准备其他东西了
20200523今天开始更新!
我发布基础题目和代码,旨在帮助初学者的学习以及提高,算作是一个很好的入门吧,而且东华大学的做个OJ系统做的很用心,题目难度循序渐进,是一个很好的成长平台。希望大家不要仅仅粘贴源代码提交,那样除了骗自己外没有其他的意义,不理解的可以上网搜索思路,其中有的题目我没思路就会去搜索思路,但切忌不要不理解或者囫囵吞枣的提交。
其中第17题后没有测试数据!
提交代码:
选择C++
编程语言,因为有的时候会用到C++的一些方便的头文件什么的,还有我编写代码是有一部分是纯C的,因为做题来讲C的scanf和printf很方便。
解题解法质量:
关于我的解法和代码的精简程度,我是以当时做题的心态来解题的,由于当时急着刷完所有题目,所以难免会有一些题应该有其他更优的解法,我却用了比较暴力一点的,毕竟当时的劳动强度有点大,抓进度来着,如果有更好的解法,欢迎联系我,或者直接评论,共同学习,共同进步!
联系方式:
如果有问题交流咨询,可以加入QQ群:673852347
其他未尽事宜,还望海涵!
问题描述 :
根据输入的半径值,计算球的体积。
球体积的计算公式为:
4/3 * PI * r3
其中PI的取值为:3.1415927
输入说明 :
输入数据为一个实数,表示球的半径,半径范围为[0,1000]。
输出说明 :
输出对应的球的体积,计算结果保留三位小数。不要输出多余空格。
输入范例 :
1.1
输出范例 :
5.575
这是AC代码:是一个基础题,注意使用double的浮点类型,如果使用float可能不会通过哦。还有.3f这种printf的输出格式,如果不懂,可以百度一下。以后还要用到,用处很大
#include // summershellQQ群:673852347
int main()
{
double PI=3.1415927,r;
while(scanf("%lf",&r)!=EOF)
printf("%.3f\n",PI*r*r*r*4/3);
return 0;
}
打个广告呀! 欢迎志同道合的朋友加入编程交流QQ群:673852347
问题描述 :
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
输入说明 :
输入数据由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
输出说明 :
输出结果,保留两位小数。
输入范例 :
3 4 -10 0
输出范例 :
13.60
以下是AC代码:
这个需要用到math.h的头文件。为了代码看起来精简舒服,我写的时候尽量排版好,EOF是读取到文件末尾的意思,本题里面可以不使用while的,在后面的题里需要必须使用EOF了。这里先一笔带过
#include // summershellQQ群:673852347
#include
int main()
{
double x1,x2,y1,y2;
while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF)
printf("%.2f\n",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
return 0;
}
打个广告呀! 欢迎志同道合的朋友加入编程交流QQ群:673852347
问题描述 :
从键盘输入一个大写字母,改用小写字母输出。
输入说明 :
一个大写英文字符
输出说明 :
对应的小写英文字符。
输入范例 :
A
输出范例 :
a
以下是AC代码:
这也是一个基础题,考察的是ascll码,要能熟悉和运用ascll码的常用字符
#include // summershellQQ群:673852347
int main()
{
char c;
scanf("%c",&c);
printf("%c\n",c-'A'+'a');
return 0;
}
问题描述 :
从键盘输入一个摄氏温度,要求转换成华氏温度输出。摄氏温度转换为华氏温度的公式为(其中c表示摄氏温度,f表示华氏温度): f=(9/5)*c+32
输入说明 :
输入一个摄氏温度
输出说明 :
输出对应的华氏温度。注意,输出结果保留两位小数,小数点后第三位四舍五入到小数点后第二位,但小数点后总共输出6位(即最后需要输出4个0)。
输入范例 :
26.67
输出范例 :
80.010000
AC代码:
需要注意的是,整型数相除时候,要加.0可以使整型数变成浮点数,这样运算就不会有精度偏差了,不然9/5等于1呀
#include // summershellQQ群:673852347
int main()
{
double c;
scanf("%lf",&c);
printf("%.2f0000\n",9.0/5.0*c+32);
return 0;
}
问题描述 :
从键盘输入一个整数,编程判断它的奇偶性。
输入说明 :
输入一个数字n
输出说明 :
输出n是奇数还是偶数。比如,输入数字5,则输出“5 is odd”;输入数字6,则输出“6 is even”
输入范例 :
5
输出范例 :
5 is odd
AC代码:
输出即可:
#include // summershell
int main()//水题,QQ群:673852347
{
int n;
scanf("%d",&n);
printf(n%2==0?"%d is even\n":"%d is odd\n",n);
return 0;
}
问题描述 :
输入一个不多于4位的正整数,要求按逆序打印出各个位上的数字,例如原数为23,应输出32;如原数为8000,应输出0008;如原数为1,则输出1。应测试以下情况:输入的数为1位、2位、3位、4位正整数;此外,还应测试以下异常情况:输入负数或0,或输入的数超过4位。
输入说明 :
输入一个整数,可能为0,也可能为负数。
输出说明 :
输入1到4位的正整数时,输出该数的逆序,如果是其它整数,则输出“error!”。输出时,行首与行尾均无空格。
输入范例 :
8000
输出范例 :
0008
AC代码:
输出逆序,我们之前学过的栈,可以用起来了。当然,不用栈直接按照数组从末输出到头也可以,都行
思想就是把每个位上的数用%10保存到数组里面,然后/10,以此类推
emm,做的时候有个测试用例,应该是不是4位的正整数,然后就没A,改了改就可以了
#include // summershell
int main()
{
int n,stack[100],top=-1;
scanf("%d",&n);
if(n<=0)printf("error!\n");
else
{
while(n)
{
stack[++top]=n%10;
n/=10;
}
if(top<=3)//居然还有输入不是1234位正整数的坑,有一个case没过,肯定是因为这
for(int i=0;i<=top;i++)printf("%d",stack[i]);
else printf("error!");
printf("\n");
}
return 0;
}
欢迎加入编程交流QQ群:673852347
,一起玩耍啊
问题描述 :
从键盘输入两个实数到变量a和b中,然后输入一个数字代表进行的运算,该数字为1则代表对a和b做加法,2代表减法,3代表乘法,4代表除法。
如果输入1 3 4,表示进行1/3的操作,结果为0.333333。输出时,保留两位小数,因此输出0.33。
注:可直接使用printf的控制格式实现保留两位小数的目的。
输入说明 :
输入两个实数,再输入一个1到4的整数,三个数字之间以空格分隔。
输出说明 :
输出计算结果,保留两位小数。如果做除法,但分母是0,则输出“error!”。输出时,行首与行尾均无空格。
输入范例 :
1 3 1
输出范例 :
4.00
AC代码:
考察switch分支结构,注意除数为0的情况即可
#include // summershell
int main()//水题
{
double a,b;
int c;
scanf("%lf %lf %d",&a,&b,&c);
switch(c)
{
case 1:printf("%.2f\n",a+b);break;
case 2:printf("%.2f\n",a-b);break;
case 3:printf("%.2f\n",a*b);break;
case 4:if(b==0)printf("error!\n");
else printf("%.2f\n",a/b);break;
default:break;
}
return 0;
}
问题描述 :
输入一个小写英文字母。如果这个字母是英文字母表的前13个字母中的一个(m字母及m以前的字母),则输出它的后一个字母;否则输出它的前一个字母。 比如输入a,则输出b,输入z,则输出y。
输入说明 :
输入一个小写字母,不需要考虑其它字符。在行首和行尾没有多余的空格。
输出说明 :
对应输入的小写字母,输出它对应的前趋或后继字母。行首和行尾不要输出多余的空格。
输入范例 :
a
输出范例 :
b
AC代码:
在这我为了精简代码,使用了三目运算符?:
不懂的同学可自行百度哦;
#include // summershell
int main()//水题,这样精简不过分吧
{char c;scanf("%c",&c);printf("%c\n",c<='m'?c+1:c-1);return 0;
}
问题描述 :
某旅游景点门票价格为每人5元。但团体可以优惠,分为以下情况:
人数超过20,则所有人优惠10%;
人数超过40,则所有人优惠15%;
人数超过80,则所有人优惠20%;
人数超过120,则所有人优惠30%。
请跟据团体的人数,求出该团体的总门票价格。
输入说明 :
输入一个整数i(0≤i≤1,000),表示一个团体的总人数。在行首和行尾没有多余的空格。
输出说明 :
输出一个实数,即该团体需要支付的总票价,精确到小数点后2位。在行首和行尾不要输出多余的空格。
输入范例 :
80
输出范例 :
340.00
AC代码:
#include // summershell
int main()//水题
{
int n;
double s;
scanf("%d",&n);
if(n<=20)s=n*5.0;
else if(n<=40)s=n*5.0*(1-0.1);
else if(n<=80)s=n*5.0*(1-0.15);
else if(n<=120)s=n*5.0*(1-0.2);
else s=n*5.0*(1-0.3);
printf("%.2f\n",s);
return 0;
}
问题描述 :
根据一个范围在0至6的整数,用英文输出它对应的是星期几。(0对应Sunday,1对应Monday, 2对应Tuesday, 3对应Wednesday, 4对应Thursday, 5对应Friday, 6对应Saturday)
输入说明 :
输入一个整数n(0 ≤ n ≤ 6)。在行首和行尾没有多余的空格。
输出说明 :
输出一个字符串,即输入n对应的星期几的英文名称,请注意大小写。在行首和行尾不要输出多余的空格。
输入范例 :
0
输出范例 :
Sunday
AC代码:
感觉这题在考英文水平,哈哈哈。
把字符串放进数组里面,使用C++的string类,很快就OK了;
#include // summershell
using namespace std;
int main()//水题
{
int n;
string s[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
cin>>n;
cout<<s[n]<<endl;
return 0;
}
欢迎加入编程交流QQ群:673852347
,一起happy啊
问题描述 :
寻找怪数:有一种奇怪的自然数,它的比其本身小的所有因子之和等于它本身,例如:6=1+2+3,其中1、2、3都是6的因子,编程找出整数N之内的所有怪数。
输入说明 :
输入一个整数N(10<=N≤10000),在行首和行尾没有多余的空格。
输出说明 :
输出N之内(<=N)的所有怪数,每一行输出一个整数。(注:若N中有3个怪数,你则需要输出三行,每行一个怪数。)所有数据前后没有多余的空格,中间也没有多余的空行。
输入范例 :
28
输出范例 :
6
28
我的AC代码:
注意是比自身小的因子,那么我们知道,因子有1,可能有2,那么当我们判断到N/2时候就没必要再判断了,因为比N/2还大的因子,就是N自己了啊
#include //
//判断到N/2就OK了,因为N/2下面的因子就是自身了
int main()
{
int N;
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
int sum=0;
for(int j=1;j<=i/2;j++)
{
if(i%j==0)sum+=j; //求出各因子
}
if(sum==i)printf("%d\n",i);
}
return 0;
}
问题描述 :
明明的爸爸是一位著名的数学家同时也是一位著名的数学启蒙老师。他经常出一些简单而有趣的数学题目来给刚刚接触数学的小朋友做,培养他们对数学的兴趣。一天,明明的爸爸想到了这样一个题目。如果有a、b、c三个1位的正整数,那么按以下的方法构成2个三位数:第一种方法是a为百位,b为十位,c为个位,构成的数就是abc;第二种方法是c为百位,b为十位,a为个位,构成的数就是cba;然后将这两个三位数相乘,会得到另一个数。现在就要数一下这个相乘后所得到的数中,有几个数字是与a、b、c相同的。例如:a=1,b=2,c=3,这样构成的两个三位数分别是123和321,两数相乘得到39483,在这个数中有2个“3”与c所表示的“3”是一样的,因此有2个数字是与a、b、c其中之一相同的。明明的爸爸决定明天把这道题目给小朋友做,他手头有很多组这样的a、b、c,但是要把所有的a、b、c都通过上述的方法计算出结果来需要很多的时间,明明的爸爸没有那么多的时间,于是他求助于你,请你帮他写一个程序,用来计算出相应的结果。 明明爸爸的问题可以归结为:输入a,b,c三个一位数字,要求abc这样的一个三位数与cba这样的一个三位数相乘,输出其结果,再判断相乘后的结果中的数字中有多少位是与a、b、c相同的,并输出有几位相等。
输入说明 :
你写的程序要求从标准输入设备(通常,键盘为标准输入设备)中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行有三个正整数a、b、c,且a、b、c都为正整数,a、b、c中间用一个空格隔开。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备(通常,显示屏为标准输出设备)中。每组运算结果为两个整数,即abc和cba的乘积和有几位相等,两个数之间用一个空格隔开。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。
输入范例 :
1 1 1
2 2 2
输出范例 :
12321 2
49284 1
AC代码如下:
因为题目说读取多行测试数据,没说具体多少个数据,所以我们就使用while语句读取到文件的末尾即可结束EOF,意思就是读取时发现没东西可以读了,就可以退出while了。
那么思路就很简单了,相乘,然后逐个取出各个位的数字,如下
#include //
int main()
{
int a,b,c,sum;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
{
int temp=sum=(100*a+10*b+c) * (100*c+10*b+a),count=0;
while(temp)
{
if(temp%10==a || temp%10==b ||temp%10==c)count++;;
temp/=10;
}
printf("%d %d\n",sum,count);
}
return 0;
}
问题描述 :
明明喜欢钻研各种各样的数学问题。一天,明明对数的因子产生了兴趣,他想把一个数的所有因子都找出来,然后把它们相加再去除以这个数,这样会得到一个比值。明明想看看不同的数的该比值会有什么不同,以便做研究。
例如6这个数,它一共有4个因子,分别是:1、2、3、6,把他们相加然后再除以6,即1+2+3+6=12,12/6=2,就可以得到2这个比值。
明明为了研究,需要得到大量的比值,但是如果通过手动计算比值的话需要花大量的时间,于是明明就想请你帮忙,帮他写一个程序,能够求数的比值。 明明的问题可以归结为:给你一个数,求所有因子和,把这些因子相加,然后再除以这个数,求得比值。
输入说明 :
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1≤n≤120),代表所求比值的那个数。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为一个浮点数,就是所求的比值,保留2位小数。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。(注:最后求得的比值保留2位小数。) 注:通常,显示屏为标准输出设备。
输入范例 :
6
10
输出范例 :
2.00
1.80
AC代码:
有一点需要注意,就是求得的因子必须得是唯一的,例如2*2=4,你不能读入两个2,因为题目说的是各因子之和,那样就重复了。所以我把for的终止条件改成了<开根。然后再特判一下,需不需要加上开根的数。
#include //
#include
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
int sum=0,i;
for(i=1;i<sqrt(1.0*N);i++)//用根值提前结束判定
{
if(N%i==0)sum=sum+i+N/i;
}
if(i==sqrt(1.0*N))sum+=i;; //如果一个数的因子是X²那么就只能加一个
printf("%0.2f\n",1.0*sum/N);
}
return 0;
}
问题描述 :
明明学习数学已经有很多年了,对各种各样的数学问题都有研究。有一天,明明的爸爸问明明说:“明明,你觉得你对数字敏感吗?”明明毫不犹豫地回答:“那当然,非常敏感。”于是明明的爸爸就说:“好,那我问你一个问题,如果有一个个位数为7的自然数N,把它的个位数移到最高位,其余各位均右移一位(如127变成712),要求这样得到的一个新的数是原数的T倍。若我现在把自然数T告诉你,你能求出最小的符合条件的自然数N吗?” 明明觉得这个问题很简单,只要按从小到大的顺序把所有是7结尾的自然数找出来,然后交换位置,再除一下,看看倍数是不是T倍就可以了。明明回答爸爸说:“这个问题很简单,来考我吧。”于是明明的爸爸就给了明明一个数字2,让他开始动手寻找。但是,使明明意想不到的是,他找了很久很久,始终没有找到想要的那个数,而当他到查到1000007时,需要的那个数还是没有出现,于是就放弃了。他觉得靠手工查找的话,是无法快速找到的。因此,明明求助于你,请你帮他写一个程序,来解决这个相当棘手的问题。但是他也给了你另外一个条件,如果找到超过1000000时还是没有找到需要的那个数的话,就停止寻找。 明明的问题可以归结为:对于一个个位数为7的自然数N,把它的个位数移到最高位,其余各位均右移一位,要求这样得到的一个新的数是原数的T倍。现给出这个自然数T,求满足这个要求的最小的自然数N。若在[1, 1000000] 的范围内没有找到N,则输出“No”。
输入说明 :
你写的程序要求从标准输入设备(通常,键盘为标准输入设备)中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅有一个自然数T(1≤T≤9)。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备(通常,显示屏为标准输出设备)中。每组运算结果输出一个自然数N或“No”,不包括双引号。每组运算结果单独形成一行数据,其行首和行尾都没有任何空格,每组运算结果与其后一组运算结果之间没有任何空行,第一组运算结果前面以及最后一组运算结果后面也都没有任何空行。
输入范例 :
5
3
8
输出范例 :
142857
No
No
AC代码:
正如我在注释中提到的,可以直接研究数变化前后的规律,如例子中T为5时候的142857,假设他是********7
。我们有*******7
乘5
=7*********
。一看就是到,原数的个位是7乘5是35,所以,新数应该是7******5
。因为新数是7******5
,所以老数应该是******57
。以此类推*******57
乘5.。。。就这么简单的推理过程,已经得到了两位数,那么离答案也就不远了。
但是也可以暴力一点,毕竟这个省力一些,就是需要把数据类型改成long int型,担心长度不够,结果出错。代码如下
(编程交流QQ群:673852347
,交流技术,分享经验!)
#include //
//其实可以列出等式 ***...***7乘以T=7***...*** 发现没??
//左边的7乘T的个位数就是右边的个位数。而右边的个位数即是左边的十位数,可以递推得到
//但是直接循环也可以做
int weishu(long a) //判断a有几位数
{
int t=1;
while(a/10)
{
t++;
a/=10;
}
return t;
}
int main()
{
int T;
while(scanf("%d",&T)!=EOF)
{
long N,temp=1,i;
if(T==1) //1的时候要特判,因为下面的N计算位数是适用于2位及其以上的数
{
printf("7\n");
continue;
}
for(N=0;N<100000;++N)//少一位循环,多一分时间
{
for(i=weishu(N),temp=1;i;i--)temp*=10; //没用math.h emm杀鸡焉用牛刀
if(N+temp*7==(N*10+7)*T)
{
printf("%ld\n",N*10+7);
break;
}
}
if(N>=100000)printf("No\n");
}
return 0;
}
问题描述 :
13号又是星期五是一个不寻常的日子吗? 13号在星期五比在其他日少吗?为了回答这个问题,写一个程序来计算在n年里13 日落在星期一,星期二…星期日的次数.这个测试从1900年1月1日到 1900+n-1年12月31日.n是一个非负数且不大于400.
这里有一些你要知道的: 1900年1月1日是星期一. 4,6,11和9月有30天.其他月份除了2月都有31天.闰年2月有29天,平年2月有28天.
输入说明 :
一个整数n(1<= n <= 400).
输出说明 :
七个在一行且相分开的整数,它们代表13日是星期六,星期日,星期一…星期五的次数.
输入范例 :
20
输出范例 :
36 33 34 33 35 35 34
AC代码:
由于数据量不是很大,所以用最单纯的思路来解这个题目,需要注意闰年的2月情况,每年都要判定一下。我设置的dd变量是一个总天数,用它可以很快的算出当前天数是星期几,然后对应的数据赋值。
#include //
int main()
{ //这题也不想研究规律啥的了,直接循环吧
int n,yy;
long long int dd=0;//可能很大
int week[7]={0,0,0,0,0,0,0},month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d",&n);
for(yy=1900;yy<=1900+n-1;yy++)
{
if( (yy%100!=0 && yy%4==0) || (yy%400==0) )month[2]=29;
else month[2]=28;
for(int i=1;i<=12;i++) //12个月鸭!
{
for(int j=1;j<=month[i];j++)//每天都要判断一下
{
++dd;
if(j==13)
week[dd%7]++;
}
}
}
printf("%d %d %d %d %d %d %d",week[6],week[0],week[1],week[2],week[3],week[4],week[5]);
return 0;
}
(编程交流QQ群:673852347
,交流技术,分享经验!)
问题描述 :
“明明,你会用1到9这九个数字组成一个三角形吗?”明明的爸爸问明明。明明被问的很莫名其妙,不明白他爸爸在说什么,于是就问道:“用1到9组成三角形???”“是的,我的要求很简单,给你2个数,一个数作为这个三角形的开始,另一个数决定这个三角形的大小。例如我给你5和6这两个数,你就要组成如下的一个三角形:
5
6 7
8 9 1
2 3 4 5
6 7 8 9 1
2 3 4 5 6 7
明白了吗?”
明明观察了许久,终于看出了门道来,说道:“就是说给我2个数,例如5和6,那我就要从5这个数开始构建一个三角形。第一行为一个数字,第二行为2个数字,以此类推,直到第六行的六个数字,且三角形中的数字都是1到9在循环重复,是这样吗?”“明明真聪明,就是这样。”明明爸爸高兴的说道。于是明明的爸爸给了明明很多组这样的数字,明明也构建出了很多个不同的三角形。
你能像明明那样,写一个程序来构建上面的三角形吗?
输入说明 :
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅有一行,每行有两个整数s和n(1≤s≤9,1≤n≤80),其中s表示位于三角形的最顶端的数字,n表示三角形由几行数字组成。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :
对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将每组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组运算结果为构建出来的三角形,三角形中的同一行的数字两两之间用一个空格隔开。每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果后面没有空行。
注:通常,显示屏为标准输出设备。
输入范例 :
1 5
5 6
输出范例 :
1
2 3
4 5 6
7 8 9 1
2 3 4 5 6
5
6 7
8 9 1
2 3 4 5
6 7 8 9 1
2 3 4 5 6 7
AC代码:
这题没啥技巧性,直接按照他说的去做就可以了
#include //
int main()
{ //主要是有个啥吧,那个最后一次输出没有空格,我们可以设计个count
int s,n,count=1;
while(scanf("%d%d",&s,&n)!=EOF)
{
if(count!=1)printf("\n");
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
printf("%d",s++);
if(s>=10)s=1;
if(j!=i)printf(" ");
}
printf("\n");
}
count++;
}
return 0;
}
(编程交流QQ群:673852347
,交流技术,分享经验!)
问题描述 :
某旅游景点门票价格为每人5元。但团体可以优惠,分为以下情况:
人数超过20,则所有人优惠10%;
人数超过40,则所有人优惠15%;
人数超过80,则所有人优惠20%;
人数超过120,则所有人优惠30%。
请跟据团体的人数,求出该团体的总门票价格。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据占一行,其中只包含一个整数i(0≤i≤1,000),表示一个团体的总人数。在行首和行尾没有多余的空格。
输出说明 :
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端,例如你在Windows中启动该程序所用的命令行终端)依次输出一组对应的答案。每组答案占一行,其中包含一个实数,即该团体需要支付的总票价,精确到小数点后2位。在行首和行尾不要输出多余的空格;在所有数据前后不要输出多余的空行;两组数据之间也不要输出多余的空行。
输入范例 :
0
40
21
输出范例 :
0.00
180.00
94.50
AC代码如下:
#include // summershell
int main()//水题
{
int n;
double s;
while(scanf("%d",&n)!=EOF)
{
if(n<=20)s=n*5.0;
else if(n<=40)s=n*5.0*(1-0.1);
else if(n<=80)s=n*5.0*(1-0.15);
else if(n<=120)s=n*5.0*(1-0.2);
else s=n*5.0*(1-0.3);
printf("%.2f\n",s);
}
return 0;
}
问题描述 :
已知有一张纸,其厚度为1厘米。现在给你一座山的高度N(单位:米)。问将纸对折多少次后,其厚度将超过这座山的高度?
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成,每行为一个正整数N,N小于等于珠穆朗玛峰的高度。
输出说明 :
对每组测试数据,你的程序需要向标准输出文件(通常为启动该程序的文本终端)依次输出一组对应的答案:对折的次数,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
输入范例 :
AC代码,简单题 注意下 单位的换算就行了
#include // summershell
int main()//水题
{
int n;
while(scanf("%d",&n)!=EOF)
{
int counter=0,high=1;
while(high<n*100)
{
high*=2;
counter++;
}
printf("%d\n",counter);
}
return 0;
}
问题描述 :
输入一个正整数,求这个正整数的各位数字之和。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组测试数据为正整数,每行一个N,N小于20000。
输出说明 :
对每组测试数据,你的程序需要向标准输出文件(通常为启动该程序的文本终端)依次输出一组对应的答案:输出为它的各位数字之和,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
输入范例 :
#include
int main()//水题
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
while(n)
{
sum+=n%10;
n/=10;
}
printf("%d\n",sum);
}
return 0;
}
问题描述 :
输入一个正整数(小于1000),计算这个正整数所有约数的和,并打印输出。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成,每行为一个正整数。
输出说明 :
对每组测试数据,你的程序需要向标准输出文件(通常为启动该程序的文本终端)依次输出一组对应的答案:这个正整数所有约数的和,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
思路:可以从1加到n的平方根 因为 可以整除一个数的时候还能加上他的商
AC
#include
#include
int main()//水题
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
for(int i=1;i<=sqrt(n);i++)
if(n%i==0)
{
sum+=i;
if(n/i!=i)sum+=n/i;
}
printf("%d\n",sum);
}
return 0;
}
如果有问题交流咨询,可以加入QQ群:673852347
问题描述 :
输入N个学生的成绩,打印输出最高分、最低分、以及平均分。
输入说明 :
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由多行组成。每组测试数据的第一行输入一个整数N(0
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)输出一行,包括3个整数,分别为最高分、最低分、平均分(向下取整),整数之间以一个空格分隔,所有数据前后没有多余的空行及空格,两组数据之间也没有多余的空行。
#include
int main()//水题
{
int n;
while(scanf("%d",&n)!=EOF)
{
int maxnum=-100,minnum=1000,sum=0,temp;
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
sum+=temp;
if(maxnum<temp)maxnum=temp;
if(minnum>temp)minnum=temp;
}
printf("%d %d %d\n",maxnum,minnum,sum/n);
}
return 0;
}
问题描述 :
利用公式e=1+ 1/1! + 1/2! + 1/3! + … + 1/n!,编程计算e的近似值,直到最后一项的绝对值小于threshold(该项不包括在结果内),输出e的值并统计累加的项数。
输入说明 :
输入一个实数threshold,表示累加的阈值,数列中最后一项的值大于等于该阈值。Threshold最小可为1e-10。
输出说明 :
输出一个实数表示e的值,保留6位小数,并输出一个整数,表示累加的项数。两个数字之间用一个空格分隔,在行首和行尾没有多余的空格。
Caution:
累加时候每次除去n 比算出n的阶乘再倒数的处理精度方面好 注意是最后一项的绝对值 使用fabs
还有 精度有可能大于1 那样的话 根据定义 就全是0 了
#include
#include
int main()//水题
{
double threshold,sum=1.0,temp=1.0;
int n=1;
scanf("%lf",&threshold);
while(fabs(temp)>=threshold)//这样精度更高一些
{
++n;
sum+=temp;
temp*=1.0/n;
}
if(fabs(threshold)>1)printf("%.6f %d",0.0,0);//把我WA了,莫非输入精度有大于1的?
else printf("%.6f %d\n",sum,n);
return 0;
}
问题描述 :
假设今年的工业产值为100万元,产值增长率为每年c%,请编程计算过多少年可实现翻一番(即增加一倍或以上)。
输入说明 :
输入一个正整数c,表示增长率的百分比,1<=c<=20。
输出说明 :
输出一个整数,表示过多少年后产值可翻一番。在行首和行尾没有多余的空格。
#include
int main()//循环,遍历!
{
int c,t=0;
double sum=100.0;
scanf("%d",&c);
while(sum<200)
{
sum=sum*(1+0.01*c);
t++;
}
printf("%d\n",t);
return 0;
}
问题描述 :
给出一系列的整数, 求它们的和。
输入说明 :
第一行是一个正整数 T ( T < 50 ), 接下来由 T 行, 代表T 组测试数据. 每一行首先包含一个正整数N, 接下来是 N 个整数。
输出说明 :
对于每组测试数据 , 输出它们的和, 每组测试数据占一行。
#include
int main()//循环,遍历!
{
int T,N;
scanf("%d",&T);
while(T--)
{
int sum=0,temp;
scanf("%d",&N);
while(N--)
{
scanf("%d",&temp);
sum+=temp;
}
printf("%d\n",sum);
}
return 0;
}
如果有问题交流咨询,可以加入QQ群:673852347
问题描述 :
判断一个数是不是素数
输入说明 :
第一行为N
下面N行,每行一个数字n
输出说明 :
判断n是不是素数,是就输出yes,否则输出no
#include
#include
int judge(int a)
{
if(a==1 || a==0)return 0;
for(int i=2;i<=sqrt(a);i++)
if(a%i==0)return 0;
return 1;
}
int main()//水题
{
int T,N;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
printf("%s\n",judge(N)?"yes":"no");
}
return 0;
}
问题描述 :
给定两个正整数,计算这两个数的最小公倍数
输入说明 :
输入包含T组测试数据,每组只有一行,包括两个不大于1000的正整数.
输出说明 :
对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。
Caution:
最小公倍数 与 最小公约数的乘积 是 两个数的乘积
#include
#include
int gongyue(int a,int b)//记忆把我拉回了大一的C程序课上的经典问题
{
int t;
if(a<b){t=a;a=b;b=t;}
return a%b==0?b:gongyue(b,a%b);
}
int main()//水题
{
int T,a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&a,&b);
printf("%d\n",a*b/gongyue(a,b));
}
return 0;
}
问题描述 :
给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。
输入说明 :
首先输入一个数T,表示以下有T行,每行为一组测试实例,每组测试实例由两个整数m和n组成。
输出说明 :
对于每组输入数据,输出一行,应包括两个整数x和y(以一个空格分隔),分别表示该段连续的整数(从m到n或者从n到m之间的所有整数)中所有偶数的平方和以及所有奇数的立方和。
你可以认为一个int型整数足以保存结果。
#include
int main()//水题
{
int T,a,b,temp,sum1,sum2,i;
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&a,&b);
if(a>b){temp=a;a=b;b=temp;}
for(i=a,sum1=sum2=0;i<=b;i++)
if(i%2==0)sum1+=i*i;
else sum2+=i*i*i;
printf("%d %d\n",sum1,sum2);
}
return 0;
}
问题描述 :
从键盘输入任意20个整数,统计其中的负数个数,并求所有整数的平均值。
输入说明 :
20个整数
输出说明 :
负数个数和整数平均值(保留1位小数)
#include
int main()//水题
{
int T=20,flag=0,sum=0,temp;
while(T--)
{
scanf("%d",&temp);
if(temp<0)++flag;
sum+=temp;
}
printf("%d %.1f\n",flag,1.0*sum/20);
return 0;
}
问题描述 :
sum=2+5+8+11+14+…
输入整数n,求sum的前n项和。
输入说明 :
正整数n
输出说明 :
仅一个数字,为最后的和。行首与行尾无空格。
#include
int main(){int n;scanf("%d",&n);printf("%d\n",n*2+n*(n-1)*3/2);return 0;}//水题
问题描述 :
输入N个日期,每个以年、月、日的顺序读入,打印输出最晚的日期、最早的日期。
输入说明 : 输出说明 : 如果有问题交流咨询,可以加入QQ群:
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由多行组成。每组测试数据的第一行输入一个整数N(0
对每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)输出两行,每行包括3个整数,第一行为最晚日期,第二行为最早日期,整数之间以一个空格分隔,行首与行尾无空格,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。
Solution:
这个题有好多种处理办法 可以三级排序 但是 我觉得 不必如此大动干戈 把日期化成整型数 然后比较大小就可以 或者化成字符串 字符串函数的比较也是可行的#include
673852347