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)

给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

输入格式:

输入在一行中给出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;
}

  

posted @ 2015-01-20 14:11  Joilee  阅读(684)  评论(0编辑  收藏  举报