IO 分支 循环
求平均数 double=(数字的和)/4.0 除以浮点数
IO-04. 混合类型数据格式化输入
#include <iostream> #include <stdio.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { char a; int b; double c,d; scanf("%lf %d %c %lf",&c,&b,&a,&d); printf("%c %d %.2f %.2f",a,b,c,d); //输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。 //在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。 return 0; }
循环-09. 支票面额(15)
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
输入格式:
输入在一行中给出小于100的正整数n。
输出格式:
在一行中按格式“y.f”输出该支票的原始面额。如果无解,则输出“No Solution”。
输入样例1:23输出样例1:
25.51输入样例2:
22输出样例2:
No Solution
分支-02. 三角形判断(15)
给定平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。
输入格式:
输入在一行中顺序给出6个[-100, 100]范围内的数字,即3个点的坐标x1, y1, x2, y2, x3, y3。
输出格式:
若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。
1 #include <iostream> 2 #include <stdio.h> 3 #include <math.h> 4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 5 6 int main(int argc, char** argv) { 7 double x1,y1,x2,y2,x3,y3; 8 scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3); 9 double a,b,c; 10 a=sqrt((double)((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); 11 b=sqrt((double)((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3))); 12 c=sqrt((double)((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))); 13 //printf("%f %f %f\n",a,b,c); 14 double zhouchang=a+b+c; 15 double banzhou=zhouchang/2.0; 16 double mianji=sqrt(banzhou*(banzhou-a)*(banzhou-b)*(banzhou-c)); 17 if(((a+b)>c)&&((b+c)>a)&&((a+c)>b)) 18 { 19 printf("L = %.2f, A = %.2f",zhouchang,mianji); 20 }else 21 { 22 printf("Impossible"); 23 } 24 25 26 return 0; 27 }
分支-18. 求一元二次方程的根(20)
本题目要求一元二次方程 a*x2+b*x+c=0 的根,结果保留2位小数。
输入格式:
输入在一行中给出3个浮点系数a, b, c,中间用空格分开。
输出格式:
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小; 2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的; 3)如果方程只有一个根,则直接输出此根; 4)如果系数都为0,则输出"Zero Equation"; 5)如果a和b为0,c不为0,则输出"Not An Equation"。
输入样例 1:
2.1 8.9 3.5
输出样例 1:
-0.44 -3.80
输入样例 2:
1 2 3
输出样例 2:
-1.00+1.41i -1.00-1.41i
输入样例 3:
0 2 4
输出样例 3:
-2.00
输入样例 4:
0 0 0
输出样例 4:
Zero Equation
输入样例 5:
0 0 1
输出样例 5:
Not An Equation
#include <iostream> #include <stdio.h> #include <math.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { double a,b,c; scanf("%lf%lf%lf",&a,&b,&c); double delta=b*b-4*a*c; if(a==0&&b==0&&c==0) { printf("Zero Equation"); } else if(a==0&&b==0&&c!=0) { printf("Not An Equation"); } else if(a==0&&b!=0&&c!=0) { printf("%.2f",-c/b); } else if(a==0&&b!=0&&c==0) { printf("0.00"); } else if(delta==0) { printf("%.2f",-b/(2.0*a)); } else if(delta>0) { double gen1=((-b)+sqrt(delta))/(2.0*a); double gen2=((-b)-sqrt(delta))/(2.0*a); printf("%.2f\n",gen1); printf("%.2f",gen2); } else if(delta<0) { double xubu=fabs(sqrt(-delta)/(2.0*a)); double shibu=-b/(2.0*a); if(b!=0) { printf("%.2f+%.2fi\n",shibu,xubu); printf("%.2f-%.2fi\n",shibu,xubu); } else { printf("0.00+%.2fi\n",xubu); printf("0.00-%.2fi\n",xubu); } } return 0; }
循环-01. 求整数段和(15)
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中-100<=A<=B<=100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中输出全部数字的和。
输入样例:-3 8输出样例:
-3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30
#include <iostream> #include <stdio.h> #include <math.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int a,b; scanf("%d%d",&a,&b); int i=a; int count=0; int sum=0; for(;i<=b;i++) { //print in 5 printf("%5d",i); if(((count%5)==4)&&i!=b)printf("\n");//注意i不能是最后一个数 否则多一个回车 sum=sum+i; count++; } printf("\nSum = %d",sum); return 0; }
循环-03. 求符合给定条件的整数集(15)
输入格式:
输入在一行中给出A。
输出格式:
输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:2输出样例:
234 235 243 245 253 254 324 325 342 345 352 354 423 425 432 435 452 453 523 524 532 534 542 543
#include <iostream> #include <stdio.h> #include <math.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char** argv) { int a; scanf("%d",&a); int b=a+1; int c=a+2; int d=a+3; int count=0; for(int i=a;i<=d;i++) { for(int j=a;j<=d;j++) { for(int k=a;k<=d;k++) { if(k==i||k==j||i==j)continue; printf("%d%d%d",i,j,k); if(count%6==5)printf("\n"); else printf(" "); count++; } } } return 0; }
循环-04. 验证“哥德巴赫猜想”(20)
数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
输入格式:
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
输出格式:
在一行中按照格式“N = p + q”输出N的素数分解,其中p <= q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
输入样例:24输出样例:
24 = 5 + 19
#include <iostream> #include <stdio.h> #include <math.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ bool isprime(long long x) { long long i;
for( i=2;i<=sqrt(x);i++) { if(x%i==0)break; } if(x>1&&i>sqrt(x)) return true; else return false; }
int main(){ long long a; scanf("%lld",&a); long long i; for(i=2;!(isprime(i)&&isprime(a-i))&&(i<=a/2);i++) { } printf("%lld = %lld + %lld",a,i,a-i); return 0; }
另外一种求素数的方法!
bool isprime(long long x) { long long i; if (x == 1) { //x==1要特别考虑 return false; } for( i=2;i<=sqrt(x);i++) { if(x%i==0)return false; } return true; }
循环-05. 兔子繁衍问题(15)
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:30输出样例:
9
1 1 2 3 5 8 13 21 34
#include <iostream> #include <stdio.h> #include <math.h> int cal(int m){ if(m<=2) return 1; else return (cal(m-1)+cal(m-2)); } int main(){ int amount;//兔子要达到的总对数 int month=1;//月数 scanf("%i",&amount); while(cal(month)<amount) month++; printf("%i\n",month);//第month个月兔子对数达到amount return 0; }
循环-06. 统计一行文本的单词个数(15)
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:Let's go to room 209.输出样例:
5
最后一个字符要特殊处理。
#include <iostream> #include <stdio.h> #include <math.h> #include<string> using namespace std; int main(){ string s; int i,c=0; getline(cin,s); //printf("%d\n",s.length()); for(i=1;i<s.length()-1;i++) if(s[i]==' '&&s[i-1]!=' ') c++; if(s[i]!=' ') { //printf("%c\n",s[i]); c++; } else { if(s[i-1]!=' ') c++; } cout<<c<<endl; return 0; }
循环-07. 爬动的蠕虫(15)
一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?
这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。
输入格式:
输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。
输出格式:
在一行中输出蠕虫爬出井的时间,以分钟为单位。
输入样例:12 3 1输出样例:
11
#include<string> int main(){ int N,U,D; scanf("%d%d%d",&N,&U,&D); int yushu=N%(U-D); int height=0; int min=0; while(height<N) { height+=U; min++; if(height>=N)break; height-=D; min++; } printf("%d",min); return 0; }
循环-09. 支票面额(15)
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
输入格式:
输入在一行中给出小于100的正整数n。
输出格式:
在一行中按格式“y.f”输出该支票的原始面额。如果无解,则输出“No Solution”。
输入样例1:23输出样例1:
25.51输入样例2:
22输出样例2:
No Solution
1 #include <iostream> 2 #include <stdio.h> 3 #include <math.h> 4 5 6 7 #include<string> 8 9 int main(){ 10 11 int n; 12 scanf("%d",&n); 13 int y,f=0; 14 while(((98*f-n)%199!=0)&&(f<=99)) 15 { 16 f++; 17 } 18 if(f>99) 19 { 20 printf("No Solution"); 21 } 22 else 23 { 24 25 y=(98*f-n)/199; 26 printf("%d.%d",y,f); 27 } 28 return 0; 29 }
循环-12. 打印九九口诀表(15)
输入格式:
输入在一行中给出一个正整数N(1<=N<=9)。
输出格式:
输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。
#include <iostream> #include <stdio.h> #include <math.h> #include<string> int main(){ int n; scanf("%d",&n); int i,j; for(i=1;i<=n;i++) { for(j=1;j<=i;j++) printf("%d*%d=%-4d",j,i,i*j); printf("\n"); } return 0; }
循环-13. 求特殊方程的正整数解(15)
本题要求对任意给定的正整数N,求方程X2+Y2=N的全部正整数解。
输入格式:
输入在一行中给出正整数N(<=10000)。
输出格式:
输出方程X2+Y2=N的全部正整数解,其中X<=Y。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出“No Solution”。
输入样例1:884输出样例1:
10 28 20 22输入样例2:
11输出样例2:
No Solution
#include <iostream> #include <stdio.h> #include <math.h> #include<string> int main(){ int num; int i=1;//要求都是正整数 不为0 scanf("%d",&num); int status=0; for(;i<=sqrt(num)&&i<=sqrt(num-i*i);i++) { double j=sqrt(num-i*i); if(j==floor(j)) { printf("%d %d\n",(int)i,(int)j); status=1; } } if(status==0) { printf("No Solution\n"); } return 0; }
循环-14. 最大公约数和最小公倍数(15)
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出2个正整数M和N(<=1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:511 292输出样例:
73 2044
#include <iostream> #include <stdio.h> #include <math.h> #include<string> int main(){ int x,y; scanf("%d%d",&x,&y); int yue,bei; if(x<y) { yue=x; bei=y; } else { bei=x; yue=y; } while(yue!=1) { if(x%yue==0&&y%yue==0) { break; } yue--; } while(bei!=x*y) { if(bei%x==0&&bei%y==0) break; bei++; } printf("%d %d",yue,bei); return 0; }
循环-16. 猴子吃桃问题(15)
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?
输入格式:
输入在一行中给出正整数N(1<N<=10)。
输出格式:
在一行中输出第一天共摘了多少个桃子。
输入样例:3输出样例:
10
#include <iostream> #include <stdio.h> #include <math.h> #include<string> int main(){ int n; scanf("%d",&n); int sum=0; int day=1; while(n!=1) { day=(day+1)*2; n--; } printf("%d",day); return 0; }