最大公约数和最小公倍数、求整数的位数及各位数字之和||找出最小值

#include<stdio.h>
#include<math.h>
int main(){
      int a,b,c;
      scanf("%d %d %d",&a,&b,&c);
      if(a+b>c&&a+c>b&&b+c>a){
            double s=(a+b+c)/2;
            double area=sqrt(s*(s-a)*(s-b)*(s-c));
            int peri=a+b+c;
            printf("area=%f,perimeter=%d\n",area,peri);
      }else
            printf("these sides do not correspond to a valid triangle\n");
      return 0;
}

实验3-9 三天打鱼两天晒网 (15分)
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

输入格式:
输入在一行中给出一个不超过1000的正整数N。

输出格式:
在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。

#include<stdio.h>
int main(){
      int m;
      scanf("%d",&m);
      switch(m%5){
            case(1):printf("fishing in day %d\n",m);break;
            case(2):printf("fishing in day %d\n",m);break;
            case(3):printf("fishing in day %d\n",m);break;
            case(4):printf("drying in day %d\n",m);break;
            case(5):printf("drying in day %d\n",m);break;
      }
      return 0;
}

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

#include<stdio.h>
int main(){
      int speed,limit;
      scanf("%d %d",&speed,&limit);
      int x=100*(speed-limit)/limit;
      if(x>=10 && x<50){
            printf("Exceed %d%%.Ticket 200",x);  
             //后面两个百分号才表示%。
      }else if(x>=50){
            printf("Exceed %d%%.License Revoked",x);
      }else
            printf("OK");
      return 0;
}

现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:
输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。`

输出格式:
在一行中输出应付款额,保留小数点后2位。

int main(){
      int a,b;
      char c;
      float pay;
      scanf("%d %d %c",&a,&b,&c);
      if(c=='m'){
            if(b==90){
                  pay=a*6.95*0.95;
            }else if(b==93){
                  pay=a*7.44*0.95;
            }else if(b==97){
                  pay=a*7.93*0.95;
            }
      }else if(c=='e'){
            if(b==90){
                  pay=a*6.95*0.97;
            }else if(b==93){
                  pay=a*7.44*0.97;
            }else if(b==97){
                  pay=a*7.93*0.97;
            }
      }
      printf("%.2f",pay);
      return 0;
}

实验4-1-1 最大公约数和最小公倍数 (15分)
本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:
输入在一行中给出两个正整数M和N(≤1000)。

输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
最小公倍数=两数乘积/最大公约数
输入样例:
求最大公约数
辗转相除法
辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
可以写成右边的格式。

辗转相除法:
#include<stdio.h>
int main(){
      int a,b,tmp,r;
      scanf("%d %d",&a,&b);
      int x=a;
      int c=b;
      if(a<b){
            tmp=a;
            a=b;
            b=tmp;
      }
      while(b!=0){
            r=a%b;
            a=b;
            b=r;
            printf("%d %d %d\n",a,b,r);
      }
      printf("%d %d\n",a,x*c/a);  //a和b最后的值都已经改变;
      return 0;
}

另外一种简单的方法:

#include<stdio.h>
int main(){
      int a,b,tmp,x;
      scanf("%d %d",&a,&b);
      if(a>b){
            tmp=a;
            a=b;
            b=tmp;
      }
      int i=a;
      for(i=a;i>=1;i--){     
            if(a%i==0&&b%i==0)
                  break;
      }x=a*b/i;
      printf("%d %d\n",i,x);
      return 0;
}

实验4-1-2 求奇数和 (15分)

本题要求计算给定的一系列正整数中奇数的和。

输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

输出格式:
在一行中输出正整数序列中奇数的和。

输入样例:

#include<stdio.h>
int main(){
      int a[10];
      int i=0;
      int sum=0;
      for(i=0;i<10;i++){
            scanf("%d",&a[i]);
            if(a[i]>0){
                  if(a[i]%2==1)
                        sum+=a[i];
            }else
                  break;
      }
      printf("%d\n",sum);
      return 0;
}

实验4-1-3 找出最小值 (20分)
本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。

输出格式:
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。

输入样例:

#include<stdio.h>
int main(){
      int n,a;
      int min=0;
      scanf("%d %d",&n,&a);
      min=a;
      for(int j=1;j<n;j++){
            scanf("%d",&a);  //可以循环读数
                  if(a<min)
                  min=a;
      }
      printf("min=%d",min);
      return 0;
}
}

实验4-1-4 求整数的位数及各位数字之和 (15分)
对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:
输入在一行中给出一个不超过10
​9
​​ 的正整数N。

输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:

#include<stdio.h>
int main(){
      int n;
      int t;
      int sum=0;
      int cnt=1;
      scanf("%d",&n);
      int m=n;
      while(m>9){   		//计算出输入的数字一共几位
            m/=10;
            cnt++;
      }printf("1)%d %d\n",cnt,m);  
      //cnt代表输出的数字位数,m最后是最高位上的数字;
      while(cnt>1){
            t=n%10;
            n=(n-t)/10;
            cnt--;
            sum+=t;
            printf("2)%d %d %d\n",cnt,t,sum);
      }
      sum=sum+m;
      printf("3)%d\n",sum);
      return 0;
}

另外一种简单的方法:

#include<stdio.h>
int main(){
      int x;
      int sum=0;
      int cnt=0;
      scanf("%d",&x);
      while(x){
            sum=sum+x%10;
            x=x/10;
            cnt++;
      }
      printf("%d %d\n",sum,cnt);
      return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值