#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
cout<<setiosflags(ios::fixed)<<setprecision(5);
double PI;
int n;
cin>>n;
for (int i = 1 ; i <= n ; i++){
PI=PI+1.0/(4*i-3)-1.0/(4*i-1);
}
PI=PI*4;
cout<<PI;
return 0;
}
**解锁新知识: c++中保留小数的方法(如上)
#include<iomanip>
cout<<setiosflags(ios::fixed)<<setprecision(5);
括号里的数字是几就保留几位小数
只要写一次,后面的数字都能用。
(还有两种方法,在我的 杂乱笔记 中)
#include<iostream>
using namespace std;
int main()
{
int n,sum = 0;
cin>>n;
for(int i = 1; i <= 10000; i++ ){
sum = sum + i * i;
if(sum == n){
cout<<i;
break;
}
if(sum>n){
cout<<i-1;
break;
}
}
return 0;
}
**本题中i<=10000很重要!!
还有当sum>n时输出i-1。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
cout<<fixed<<setprecision(6);
int n,t,i;
double sum=0,a=1,b=2;
cin>>n;
for(i = 1;i <= n; i++){
sum=sum+b/a;
t=b;
b=b+a;
a=t;
}
cout<<sum<<endl;
return 0;
}
O - 期末考试之分等级
Description
期末考试结束了,老师想要根据学生们的成绩划分出等级。共有5个等级A,B,C,D和E。
划分方法如下,90分(含90)以上的为A,80~90(含80)间的为B,70~80(含70)间的为C,
60~70(含60)的为D,不及格的为E。
根据输入的成绩,编程输出各个级别段人数。
Input
输入第一行包含一个正整数N(N<= 100)代表学生的数目,接下来有N行数据每行一个整数(0~100)代表
一个学生的成绩。
Output
输出有五行格式如下:
A nA
B nB
C nC
D nD
E nE
其中A,B,C,D,E代表等级,nA,nB等代表个等级的人数,等级和人数之间有一个空格。
Sample
Input
6 66 73 85 99 100 59
Output
A 2 B 1 C 1 D 1 E 1
#include<iostream>
using namespace std;
int main()
{
int n,m,nA=0,nB=0,nC=0,nD=0,nE=0;
cin>>n;
for( int i = 1; i <= n; i++){
cin>>m;
if(m>=90)
nA++;
else if(m>=80&&m<90)
nB++;
else if(m>=70&&m<80)
nC++;
else if(m>=60&&m<70)
nD++;
else
nE++;
}
cout<<"A "<<nA<<endl;
cout<<"B "<<nB<<endl;
cout<<"C "<<nC<<endl;
cout<<"D "<<nD<<endl;
cout<<"E "<<nE<<endl;
return 0;
}
**对数组不熟悉,只能先这样写了
P - 平方数
Description
飞飞特别喜欢平方数,可是他数学并不好,你能帮他计算 n 与 m 之间所有平方数之和吗?
提示:若一个整数的开方还是整数,它就是平方数。例如:4、9、16、25是平方数。n 和 m 均可能为 0 至 100000000 内的任意整数,n、m不一定有序。
Input
第一行 T 代表数据的组数。
接下来有 T 行,每行两个整数n,m (0 <= n, m <= 100000000)
Output
输出一个整数,代表所求区间内平方数之和。
Sample
Input
3 1 4 10 3 17 20
Output
5 13 0
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int t,n,m,sum,K;
cin >> t;
while(t--){
sum = 0;
cin >> n >> m;
if(n>m){
K = n;
n = m;
m = K;
}
for(int i = n; i <= m; i++)
{
K = sqrt(i);
if(K * K == i)
sum += i;
}
cout<<sum<<endl;
}
return 0;
}
**在c++中cin>>后应该是不能有" " 和endl 的。。。。。
Q - C语言实验——打印菱形
Description
从键盘输入一个整数n(1≤n≤9),打印出指定的菱形。
Input
正整数n(1≤n≤9)。
Output
指定的菱形。
第一行前面有n-1个空格,第二行有n-2个空格,依此类推。
Sample
Input
5
Output
* *** ***** ******* ********* ******* ***** *** *
#include<iostream>
using namespace std;
int main()
{
int n,i,j;
cin>>n;
for(i=0;i<n;i++){
for(j=0;j<n-1-i;j++){
cout<<" ";
}
for(j=0;j<2*i+1;j++){
cout<<"*";
}
cout<<endl;
}//分为上下两部分输出
for(i=0;i<n-1;i++){
for(j=0;j<i+1;j++){
cout<<" ";
}
for(j=0;j<2*(n-1-i)-1;j++){
cout<<"*";
}
cout<<endl;
}
return 0;
}
***我真的不懂不懂不懂啊啊啊啊
**好像懂了一、、
R - 水仙花数
Description
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+33。
现在要求输出所有在m和n范围内的水仙花数。
Input
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
Output
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
Sample
Input
100 120 300 380
Output
no 370 371
Hint
#include<stdio.h>
int main()
{
int i,a,b,c,d,h;
int m,n;
int count;
while(~scanf("%d %d",&m,&n))
{
h=0;
count=0;
for(i=m; i<=n; i++)
{
a=i/100;
b=i/10%10;
c=i%10;
d=a*a*a+b*b*b+c*c*c;
if(i==d)
{
if(h==0)
{
printf("%d",i);
}
else
{
printf(" %d",i);
}
count=1;
h++;
}
}
if(count==0)
printf("no");
printf("\n");
}
return 0;
}
**我是废物啊!!实在用c++写不出来呀。。。
S - C语言实验——余弦
Description
输入n的值,计算cos(x)。
Input
输入数据有多行,每行两个数,包括x和n。第一数据为x,第二个数据为n。
Output
输出cos(x)的值,保留4位小数。
Sample
Input
0.0 100 1.5 3
Output
1.0000 0.0701
#include <stdio.h>
int main()
{
double x, sum, t, item;
int n, i;
while (scanf("%lf %d", &x, &n)==2)//while (~scanf("%lf %d", &x, &n))
t = x*x;
item = 1.0;
sum = 1.0;
for (i=1; i<=n; i++)
{
item *= -t;
item /= (i*2-1)*(i*2);
sum += item;
}
printf("%.4lf\n", sum);
}
return 0;
}
**scanf(...)==2什么意思?? 在网查到了这个:
T - 完美的素数
Description
素数又称质数。指一个大于1的自然数,除了1和此整数自身外,不能被其他自然数整除的数。我们定义:如果一个素数是完美的素数,当且仅当它的每一位数字之和也是一个素数。现在给你一个正整数,你需要写个程序判断一下这个数按照上面的定义是不是一个完美的素数。
Input
输入包含多组测试数据。
每组测试数据只包含一个正整数 n (1 < n <= 10^6)。
Output
对于每组测试数据,如果 n 是完美的素数,输出“YES”,否则输出“NO”(输出均不含引号)。
Sample
Input
11 13
Output
YES NO
#include<stdio.h>
int main()
{
int a,i,sum,a1,a2,a3,a4,a5,a6,j,temp;
while(~scanf("%d",&a))
{
if(a==1)
printf("NO\n");
else{
temp = 1;
a1 = a % 10;
a2 = a / 10 % 10;
a3 = a / 100 % 10;
a4 = a / 1000 % 10;
a5 = a / 10000 % 10;
a6 = a / 100000 % 10;
sum = a1 + a2 + a3 + a4 + a5 + a6;
for(i = 2; i < a; i++){
if(a % i == 0)
temp++;
}
for(j = 2; j < sum; j++){
if(sum%j == 0)
temp++;
}
if(temp == 1)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
**好像懂了,又好像妹懂。。。
U - A+B for Input-Output Practice (IV)
Description
Your task is to Calculate the sum of some integers.
Input
Input contains multiple test cases. Each test case contains a integer N, and then N integers follow in the same line. A test case starting with 0 terminates the input and this test case is not to be processed.
Output
For each group of input integers you should output their sum in one line, and with one line of output for each line in input.
Sample
Input
4 1 2 3 3 5 1 2 4 4 5 0
Output
9 16
#include <stdio.h>
int main()
{
int n, i,x,sum=0;
while (~scanf("%d",&n))
{
if(n==0) break;
for(i=1;i<=n;i++)
{
scanf("%d",&x);
sum+=x;
}
printf("%d\n",sum);
sum=0;
}
return 0;
}
**最后的sum=0有什么用?我不懂 o.o
答:sum重新赋值然后下一次循环是从0开始的
V - 小金掰呀掰不够玉米
Description
众所周知,C语言的学习是我们程序设计基础的重点和主要内容。
有一天,小金(a1s4z5)觉得好饿、好饿,于是去地里找玉米吃。他拿了一个很大的背包,可以装下很多很多玉米。
他掰玉米有一个习惯,第1次的时候掰1个,第2次的时候掰2个,第3次的时候掰3个...第n次的时候掰n个,他打算掰完第n次的时候就回家吃玉米。
在苞米地里,他越掰越高兴越掰越高兴,终于当他摩擦到要停不下来的时候,发现自己根本背不动他的背包了。于是他要将前m次掰的玉米全都扔掉才能回家开饭。但是小金的数学很不(li)好(hai),请你帮他算一算袋子里还有多少玉米。
Input
多组输入。
每组输入两个空格隔开的整数n和m,含义如题意描述。(0 < m < n < 10^4)
Output
输出小金的背包里最后剩下多少玉米。输入输出各占一行,保证数据合法。
Sample
Input
5 2 6 3
Output
12 15
#include<stdio.h>
int main()
{
int n,m,sum1=0,sum2=0,sum=0;
while(~scanf("%d %d",&n,&m)){
for(int i=1; i<=n; i++){
sum1 += i;
}
for(int j=1; j<=m; j++){
sum2 += j;
}
sum=sum1-sum2;
printf("%d\n",sum);
}
return 0;
}
**为什么不对哦??
答: while里面没重新赋值,
把上面的sum1 = sum2 = 0放到while里就行了。
贴个对的吧。。。
#include<stdio.h>
int main()
{
int n,m,i,x=0,h;
while(~scanf("%d %d",&n,&m))
{
for(i=1;i<=n;i++)
{
x+=i;
}
for(h=m;h>=0;h--)
{
x-=h;
}
printf("%d\n",x);
x=0;
}
return 0;
}
W - C/C++练习7---求某个范围内的所有素数
Description
求小于n的所有素数,按照每行10个显示出来。
Input
输入整数n(n<10000)。
Output
每行10个依次输出n以内(不包括n)的所有素数。如果一行有10个素数,每个素数后面都有一个空格,包括每行最后一个素数。
Sample
Input
100
Output
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Hint
请注意题目中求的是小于n的所有素数。
#include <stdio.h>
int main()
{
int n,i,temp,a = 0;
scanf("%d",&n);
for(i = 2; i <= n; i++){
if(i!=n){
if(i == 2){
printf("%d ",i);
a++;
}
else {
for(temp = 2; temp < i; temp++){
if(i % temp == 0)
break;//保证i是素数
}
if(i == temp){
printf("%d ",i);
a++;
if(a%10==0)//保证一行十个数
printf("\n");
}
}
}
}
printf("\n");
return 0;
}
X - 九九乘法表
Description
九九乘法表是数学学习的基础,今天我们就来看看乘法表的相关问题。《九九乘法歌诀》,又常称为“小九九”,如下图所示。你的任务是写一个程序,对于给定的一个正整数 n ,输出“九九乘法表”的前 n 行。例如,输入 n 为 9,你的程序的输出将为下图:
Input
输入包含多组测试数据,以 EOF 结束。每组测试数据只包含一个正整数 n (0 < n < 10)。
Output
对于每组测试数据,输出上图所示“九九乘法表”的前 n 行。
Sample
Input
2 3
Output
1*1=1 1*2=2 2*2=4 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9
Hint
必须使用for循环,如果你的代码中出现例如
if(n == 1) printf(“1*1=1\\n”);
if(n == 2) printf(“1*1=1\\n1*2=2 2*2=4\\n”);
或其类似语句,本题不得分
#include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n)){
for(int i = 1; i<=n; i++){
for(int j=1; j<=i; j++){
if(j==1){
printf("%d*%d=%d",j,i,i*j);
}
else
printf(" %d*%d=%d",j,i,i*j);
}
printf("\n");
}
}
return 0;
}
**有亿、、厉害!
Y - 区域内点的个数
Description
X晚上睡不着的时候不喜欢玩手机,也不喜欢打游戏,他喜欢数星星。
Input
多组输入。
每组先输入一个整数N(N <= 10000),接着输入两个点代表矩形的左下点B(x,y)和右上点T(x,y),然后输入N个(X,Y)代表N颗星星。问有多少颗星星在窗子内部,在窗边上的不计。
Output
输出一个整数,代表有多少颗星星在窗子内部。
Sample
Input
3 0 1 3 4 1 1 2 2 3 3 2 1 1 5 5 4 4 0 6
Output
1 1
#include<stdio.h>
int main()
{
double x1,x2,y1,y2;
int n;
double x,y;
int num = 0;
while(~scanf("%d",&n)){
num = 0;
scanf("%lf %lf",&x1,&y1);
scanf("%lf %lf",&x2,&y2);
while(n--){
scanf("%lf %lf",&x,&y);
if(x > x1 && x < x2 &&y > y1 && y<y2)
num++;
}
printf("%d\n",num);
}
return 0;
}
**这个 有点意思哦!
实验四掌握得不好,而且还没写完,过两天应该会补充上的。