2022夏令营-作业05
7-1 比大小
小明正在编写一个计算机比大小游戏,计算机先放一个预置整数m,用户再输入一个数n,需要你编写程序将此数n与预置数m相比较,并给出比较结果。
输入格式:
在一行中输入两个整数m和n,以空格分隔。
输出格式:
在一行中输出比较的结果,分别为“Same!”、“Big!”、“Small!”。
解题思路:
照着题目说的做,用if-else分支结构即可;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int m,n; cin>>m>>n; if(n>m) cout<<"Big!"; else if(n==m) cout<<"Same!"; else cout<<"Small!"; return 0; }
7-2 分段函数
按照要求计算下列分段函数y的值。
输入格式:
在一行中给出整数x。
输出格式:
在一行中按“y=result”的格式输出,其中result计算结果。结尾有换行。
解题思路:
依旧是熟练运用if-else分支;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int x; cin>>x; int ans; if(x<2) ans = 2*x-1; else if(x>=2&&x<10) ans = 4*x-5; else ans = 3*x+5; cout<<"y="<<ans<<endl; return 0; }
7-3 苹果和虫子
你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?
输入格式:
输入仅一行,包括n,x和y(均为整数)。输入数据保证y<=n*x。
输出格式:
输出也仅一行,剩下的苹果个数。
解题思路:
如果经过的y小时可以整除虫子吃一个苹果花的x小时,就有虫子刚好吃完整数个苹果,用n-y/x就行;否则,就是n-y/x-1;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n,x,y; cin>>n>>x>>y; int ans = n; if(y%x!=0) ans -= y/x+1; else ans -= y/x; cout<<ans; return 0; }
7-4 判断能否被3,5,7整除
给定一个整数,判断它能否被3,5,7整除,并输出以下信息: 1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格); 2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔); 3、只能被其中一个数整除(输出这个除数); 4、不能被任何数整除,输出NO。
输入
输入一行,包括一个整数。
输出
输出一行,按照描述要求给出整数被3,5,7整除的情况。
解题思路:
题目的要求很明显,解法有多种,目的都是在于写的分支越少越好;我采用的是分别对3,5,7整除判断,逐个输出的方式;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int num ; cin>>num; int flag=0; if(num%3==0) if(flag)cout<<" 3"; else{ cout<<"3";flag++;} if(num%5==0) if(flag)cout<<" 5"; else{ cout<<"5";flag++;} if(num%7==0) if(flag)cout<<" 7"; else{ cout<<"7";flag++;} if(!flag)cout<<"NO"; return 0; }
7-5 骑车与走路
在大学校园里,没有自行车上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。
输入
输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。
输出
输出一行,如果骑车快,输出一行"Bike"; 如果走路快,输出一行"Walk"; 如果一样快,输出一行"All"。
解题思路:
分别算出两个时间,再进行比较即可;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ double length; cin>>length; double bike = 50+length/3; double walk = length/1.2; if(bike<walk) cout<<"Bike"; else if(bike>walk) cout<<"Walk"; else cout<<"All"; return 0; }
7-6
编写程序实现如下功能: 判断三条边是否构成三角形。 已知构成三角形的条件是: 三边的边长必须是正数, 并且任意 两边的长度和大于第三边的长度。
输入格式:
在一行输入三个正整数(用空格分隔),分别代表三角形的三条边。
输出格式:
如果可以构成三角形,则输出“Y ”; 如果不可以构成三角形,则输出“N”; 如果三 边长度中有小于 0 或等于 0 的情况,则直接输出“ F”。
解题思路:
照着题目做,运用if-else分支结构;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int l1,l2,l3; cin>>l1>>l2>>l3; if(l1<=0||l2<=0||l3<=0) cout<<"F"; else if(l1+l2>l3&&l1+l3>l2&&l2+l3>l1) cout<<"Y"; else cout<<"N"; return 0; }
7-7
给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出一个华氏温度。
输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。
解题思路:
直接照着做,公式已经给了;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int f; cin>>f; int c = 5*(f-32)/9; cout<<"Celsius = "<<c; return 0; }
7-8
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。
输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。
解题思路:
if-else分支,针对不同的价格给出结果;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int x; cin>>x; double ans=0; if(x<=50&&x>=0) ans = x*0.53; else if(x<0){ cout<<"Invalid Value!"; return 0; }else ans = 50*0.53+0.58*(x-50); printf("cost = %.2f",ans); return 0; }
7-9
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
解题思路:
可以利用scanf的特性直接分别得到起始的小时与分钟,以及结束的时间点;以此来快速算出旅途所花时间;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int s1,s2,e1,e2; scanf("%2d%2d",&s1,&s2); scanf("%2d%2d",&e1,&e2); int h = e1 - s1; int min = e2 - s2; if(min<0){ min+=60; h--; } printf("%02d:%02d",h,min); return 0; }
7-10
输入一个四则运算表达式,输出运算结果,要求对除数为0的情况作特别处理。题目保证输入与输出均在双精度范围内。
输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间没有空格,操作数的数据类型为实型。
输出格式:
在一行中输出表达式的运算结果,保留两位小数。 如果除法分母为0,则输出错误信息“Divisor can not be 0!”;如果输入了除加减乘除以外的非法运算符,则输出错误信息“Unknown operator!”。
解题思路:
1、同样,根据题目条件写好if-else结构的判断即可; 2、也可以巧妙运用switch语句,让代码更简练;注意一定要有break,不然会把其他分支语句也执行了,直到遇到break为止;
参考答案:
#include<bits/stdc++.h> using namespace std; int main() { double a,b; char c; scanf("%lf%c%lf",&a,&c,&b); switch(c) { case '+':printf("%.2f",a+b);break; case '-':printf("%.2f",a-b);break; case '*':printf("%.2f",a*b);break; case '/': if(b) printf("%.2f",a/b); else printf("Divisor can not be 0!"); break; default :printf("Unknown operator!"); } }
#include <bits/stdc++.h> using namespace std; int main() { float a,b; char x; cin>>a; x=getchar(); cin>>b; if(x=='+') { printf("%.2f\n",a+b); } else if(x=='-') { printf("%.2f\n",a-b); } else if(x=='*') { printf("%.2f\n",a*b); } else if(x=='/') { if(b!=0) printf("%.2f\n",a/b); else cout<<"Divisor can not be 0!"<<endl; } else { cout<<"Unknown operator!"<<endl; } return 0; }
7-11
本题要求编写程序,输入10个字符,统计其中英文字母、数字字符和其他字符的个数。
输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照 letter = 英文字母个数, digit = 数字字符个数, other = 其他字符个数 的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。
解题思路:
照着做;(注意,因为会输入空格之类的字符,所以不要用cin)
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ char ch; int l = 0,d = 0,o = 0,flag = 0; while(1){ if(++flag>10)break; ch=getchar(); if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))l++; else if(ch>='0'&&ch<='9')d++; else o++; } printf("letter = %d, digit = %d, other = %d",l,d,o); return 0; }
2022夏令营-作业06
7-1
高斯在小时候很顽皮,但是也显示出极高的天赋。 有一次放学后,因为全班同学整队时纪律不好,集体被老师留在教室里罚写作业。 老师要求所有同学完成从1至100的加法后才可返学离开,高斯很快写出了答案5050后离开学校了。但是他的小伙伴可就没这么幸运了,老老实实的做加法。 现在请你帮助高斯的同学们,编写一个程序,来计算表达式1+2+3+...+100的值并输出。
输入格式:
本题无输入
输出格式:
在一行中输出1+2+3+...+100的值。
思路:
写一个循环即可; 希望营员不要学我直接输出答案,不推荐,初学还是去写循环体会一下,这才是这道题的初衷;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ cout<<"5050"; return 0; }
7-2
本题给出整数区间[a,b],请计算并输出从a至b区间内所有的整数的和,题目保证运算结果在整数范围内。
输入格式:
在一行中给出2个整数a和b(a<b)。
输出格式:
在一行中输出从a累加到b和值。
思路:
第一天作业的原题,学习通第一天的视频课里也有讲;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int a,b; cin>>a>>b; int ans=0; for(int i=a;i<=b;i++){ ans+=i; } cout<<ans; return 0; }
7-3
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
思路:
循环想加;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; double ans = 0; for(int i=1;i<=n;i++) ans+=1.0/i;//注意是1.0,而不是1,不然会损失精度 printf("sum = %.6f",ans); return 0; }
7-4
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
思路:
循环想加;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; double ans = 0; for(int i=1;i<=n;i++) ans+=1.0/(2*i-1); printf("sum = %.6f",ans); return 0; }
7-5
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。
思路:
循环想加,定义一个flag作为符号;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; double ans = 0; int flag = 1; for(int i=1;i<=n;i++){ ans+=flag*(1.0/((i-1)*3+1));//分母是等差数列 flag*=-1; } printf("sum = %.3f",ans); return 0; }
7-6
本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m_2+1/m+(m+1)2+1/(m+1)+⋯+n_2+1/n。
输入格式:
输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
思路:
换汤不换药
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int m,n; cin>>m>>n; double ans = 0; for(int i=m;i<=n;i++){ ans+=i*i+1.0/i;//浮点数加整数,结果为浮点数 } printf("sum = %.6f",ans); return 0; }
7-7
本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中输出部分和的值,结果保留三位小数。
思路:
换汤不换药,和前面的题一样的套路,一通百通;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; double ans = 0; int flag = 1; for(int i=1;i<=n;i++){ ans+=(double)i/(2*i-1)*flag;//需求的答案为实数,所以强转为double类型 flag*=-1; } printf("%.3f",ans); return 0; }
7-8
有一分数序列:
求出这个数列前n项之和。
输入
在一行中输入一个整数n。
输出格式:
数列前n项之和,精度为小数点后4位。
思路:
找到规律即可,与前面的题一样循环相加;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; double ans = 0; int a=2,b=1; for(int i=1;i<=n;i++){ ans+=(double)a/b; int temp = b; b = a; a = temp + b; } printf("%.4f",ans); return 0; }
7-9
编写程序,求自然数1至n(n>1)的累乘积(即阶乘)。其中n的值从键盘输入(n<=12)。
输入格式:
输入一个正整数。
输出格式:
输出一个正整数,最后换行。
思路:
运用循环相乘即可;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; int ans = 1; for(int i = 2;i <= n;i++) ans*=i; cout<<ans; return 0; }
7-10
输入一个自然数,拆分成两个非负整数的和,输出所有组合
输入格式:
输入一个自然数
输出格式:
拆分成两个非负整数的和,输出所有可能的两个数相加的表达式
思路:
循环遍历到n/2为止;
参考答案:
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; for(int i = 0;i<=n/2;i++){ printf("%d+%d=%d\n",i,n-i,n); } return 0; }
2022夏令营-作业07
7-1
本题要求计算给定的一系列正整数中奇数的和。
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
参考答案:
#include <bits/stdc++.h> using namespace std; int main() { int sum=0,a; while(cin>>a) { if(a<=0) break; if(a&1) sum+=a;//奇数的二进制第一位为1 } cout<<sum; }
7-2
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过109的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
思路:
1.可以采用读入数字,然后不断%10,/10的方法得到各个位置的数字 2.可采用string,更方便
参考答案:
#include <bits/stdc++.h> using namespace std; int main() { string a; cin>>a; int ans=0; for(int i=0;i<a.length();i++) { ans+=a[i]-'0'; } cout<<a.length()<<" "<<ans; }
7-3
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
思路:
由数学结论:两个数的最小公倍数和最大公约数的乘积 就是 这两个数的乘积(mn=xy),所以我们得到最大公约数就知道了最小公倍数S 补充:_gcd是<algorithm>的库函数;也可以自行实现gcd函数,采用辗转相除法;
参考答案:
#include <bits/stdc++.h> using namespace std; //辗转相除法求gcd //int gcd(int number1, int number2) { // if (number2 == 0) { // return number1; // } else { // return gcd(number2, number1 % number2); // } //} int main() { int a,b; cin>>a>>b; cout<<__gcd(a,b)<<" "<<a*b/__gcd(a,b); }
7-4
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
思路:
循环判断素数
参考答案:
#include <bits/stdc++.h> using namespace std; int main () { int sum=0,m,n,cont=0; int j = 2; cin>>m>>n; for(int i=m;i<=n;i++) { for(j=2;j<=i/2;j++){ if(i%j==0)break; } if(j>i/2&&i>=2){ cont++; sum=sum+i; } } cout<<cont<<" "<<sum; return 0; }
7-5
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
思路:
模拟;
参考答案:
#include <bits/stdc++.h> using namespace std; int main() { int a,b,n,cnt; cin>>a>>n; for(cnt=1;cnt<=n;cnt++) { cin>>b; if(b<0) {cout<<"Game Over"; return 0;} if(b>a) cout<<"Too big"<<endl; else if(b<a) cout<<"Too small"<<endl; else break; } if(cnt==1) {cout<<"Bingo!";} else if(cnt<=3) {cout<<"Lucky You!";} else if(cnt<=n) {cout<<"Good Guess!";} else {cout<<"Game Over";} }
7-6
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
思路:
定义cnt记录月数,利用a、b、c三个变量进行迭代;c代表当前月的兔子数,b代表下个月将诞生的兔子,a代表两个月后将诞生的兔子;
参考答案:
#include <bits/stdc++.h> using namespace std; int n,a=1,b,c,cnt; //此时数据处在的月份可以认为是在-1月; int main() { cin>>n; while(c<n) { cnt++; c+=b; b=a; a=c; } cout<<cnt-1; }
7-7
皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?
输入格式:
输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。
输出格式:
在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。
思路:
依旧利用循环遍历的手段;
参考答案:
#include <bits/stdc++.h> using namespace std; int main () { int n; double h; cin>>h>>n; if(h==0||n==0){ printf("0.0 0.0");return 0;} //if(n==0){ printf("0.0 %.1f",h);return 0;} double nlength = h,length = h; for(int i=2;i<=n;i++){ length += nlength; nlength *= 1.0/2; } nlength *= 1.0/2; printf("%.1f %.1f",length,nlength); }
7-8
下面是一个完整的下三角九九口诀表:
本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。
输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
思路:
1.面向答案编程 2.也可以老老实实的用循环,思路参考前几天做过的那道输出三角形,用二重循环;
参考答案:
#include <bits/stdc++.h> using namespace std; int main() { string a[]={ "1*1=1 ", "1*2=2 2*2=4 ", "1*3=3 2*3=6 3*3=9 ", "1*4=4 2*4=8 3*4=12 4*4=16 ", "1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 ", "1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 ", "1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 ", "1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 ", "1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 " }; int n; cin>>n; for(int i=0;i<n;i++) { cout<<a[i]<<endl; } }
7-9
某工地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块砖,问有多少种搬法?
输入格式:
输入在一行中给出一个正整数n。
输出格式:
输出在每一行显示一种方案,按照"men = cnt_m, women = cnt_w, child = cnt_c"的格式,输出男人的数量cnt_m,女人的数量cnt_w,小孩的数量cnt_c。请注意,等号的两侧各有一个空格,逗号的后面也有一个空格。 如果找不到符合条件的方案,则输出"None"
思路:
三重循环枚举即可;
参考答案:
#include <bits/stdc++.h> using namespace std; bool flag; int main() { int n; cin>>n; for(int men=0;men<=n/3;men++) { for(int women=0;women<=n/2;women++) { for(int child=0;child<=2*n;child+=2) { if(men*3+women*2+child/2==n&&men+women+child==n) { printf("men = %d, women = %d, child = %d\n",men,women,child); flag=true; } } } } if(!flag) { cout<<"None"; } return 0; }
7-10
本题要求编写程序,计算序列部分和 4∗(1−1/3+1/5−1/7+...) ,直到最后一项的绝对值小于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“Pi = pi”的格式输出部分和的值pi,精确到小数点后四位。题目保证输入数据和计算结果均不超过双精度范围。
思路:
跟作业06的循环题很像,换成while循环设定好边界条件即可;
参考答案:
#include <bits/stdc++.h> using namespace std; int main() { double eps,ans=0,i=1,flag=1; cin>>eps; while(1/i>=eps) { ans+=4*flag/i; flag*=-1; i+=2; } ans+=4*flag/i; printf("Pi = %.4f",ans); }