C语言_练习(六)

C语言_练习(六)

50、吃龙虾
小瓜非常喜欢吃龙虾,一个阳光明媚的星期天早晨,他来到海鲜市场采购龙虾。海鲜市场里一共有n只龙虾,每只龙虾重ai克。由于小瓜非常挑剔,他只吃重大于等于m克的龙虾,于是他打算把所有重大于等于m克的龙虾买回家。请你帮小瓜算一下他一共将会买多少克龙虾。

#include <stdio.h>
#include <math.h>
int main() {

	long long n,m,i,t,sum=0;
	scanf("%lld%lld",&n,&m);
	for(i=0;i<n;i++){
	    scanf("%lld",&t);
	    if(t>=m){
	        sum+=t;
	    }
	}
	printf("%lld",sum);
	return 0;
}

51、或减与
输入a和b。
输出 a位或b 和 a位与b 的差。

#include <stdio.h>
#include <math.h>
int main() {

	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d",(a | b)-(a & b));
	return 0;
}

52、转二进制
请你把一个整数n转化为二进制并输出。

#include <stdio.h>
#include <math.h>
int main() {

	int n;
	scanf("%d",&n);
	while(n){
	    printf("%d",n%2);
	    n=n/2;
	    
	}
	return 0;
}

53、乘法
给出三个整数a,b,c,请找出最小的进制K(2<=K<=16)使得a*b=c在K进制下成立。
比如a=11,b=10,c=110。那么当K=2的时候 (11)2 ∗ (10)2 = (110)2 成立,当K=10的时候 (11)10 ∗ (10)10 = (110)10也成立。

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int anytoten(int a,int k)
{   
    int sum=0,i=0;
    while(a)
    {   if(a%10<k)
       { 
           sum+=(a%10)*pow(k,i);
            i++;
           a/=10;
       }
       else return 0;
    }
    return sum;
}
int main() {
  
   int a,b,c;
   int k;
   bool flag=false;
   scanf("%d%d%d",&a,&b,&c);
   for(k=2;k<=16;k++)
   {   if(anytoten(a,k)!=0&&anytoten(b,k)!=0&&anytoten(c,k)!=0)
       if(anytoten(a,k)*anytoten(b,k)==anytoten(c,k))
       {
           flag=true;
           break;
       }
       
   }
   if(flag==true)
       printf("%d\n",k);
   else 
       printf("%d\n",flag);
    
  
}

54、转二进制2
请你把一个整数n转化为二进制并输出。
·itoa()函数·

#include <stdio.h>
#include <stdlib.h>
int main() {
    int a;
    char str[1000];
    scanf("%d",&a);
    itoa(a,str,2);
    printf("%s\n",str);
    return 0;
}

55、进制转换
输入一个十进制整数n,和一个进制b,输出b进制下的n。
0 <= n <= 10^9
2 <= b <= 16

#include <stdio.h>
#include <stdlib.h>
int main() {
    int n,b;
    char str[1000];
    scanf("%d%d",&n,&b);
    itoa(n,str,b);
    printf("%s\n",str);
    return 0;
}

56、费马大定理扩展
费马大定理:对于 n>2 ,不存在整数 x,y,z>1 使得 xn=yn+zn 满足。
但是对于 n=3 的时候,是有可能存在 o,r,s,t>1 ,使得 o3=r3+s3+t3 成立的(比如 123=63+83+103 )。
现在给定一个整数N,请列出所有满足条件的 {o,r,s,t} 组合,其中 1<o≤N,1<r<s<t 。

#include <stdio.h>
#include <stdbool.h>
int main() {
    int N;
    scanf("%d",&N);
    bool flag=false;
    int o,r,s,t;
    for(o=2;o<=N;o++)
    for(r=2;r<N-2;r++)
    for(s=r+1;s<N-1;s++)
    for(t=s+1;t<N;t++){
        if(o*o*o==r*r*r+s*s*s+t*t*t){
            printf("(%d,%d,%d,%d)\n",o,r,s,t);
            flag=true;
            
        }
    }
    if(flag==false)
        printf("OMG");
    return 0;
}

57、翻转数组
输入一个长度为n(1 <= n <= 100000)数组,倒序输出他。
数组中的元素ai满足(1≤ai≤100000)。

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

    return 0;
}

58、收金币(遍历求和)
地上有n个金币,编号1到n,按照编号从小到大顺时摆成一个圈。每一个金币有一价值p[i] (1<=i<=n)。现在大Noder和小Noder开始收金币,他们每个人都要收集编号连续的金币。大Noder从1号开始顺时针收集,小Noder从n号开始逆时针收集。直到把所有的金币收集完。但是他们想要得到相同多的金币,请问他们能实现吗?

#include <stdio.h>

int main() {
	int n,a[100000],i,j;
	int sum1=0,sum2=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
	    scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{ 
	    sum1+=a[i];
	    sum2=0;
	  for(j=i+1;j<n;j++)
	  { 
	     
	     sum2+=a[j];
	  }
	  if(sum1==sum2)
	  {
	      printf("YES");
	      break;
	  }
	  
	}
	if(sum2!=sum1)
	printf("NO");
    
	
	return 0;
}

59、好事成双
中国人办喜事讲究好事成双,现在定义“好事成双”对:如果两个数字a,b,只要a=2b或者b=2a成立,那么就说这两个数字是“好事成双”对。现在给出一个数组,请计算一下里面有多少“好事成双”对。

#include <stdio.h>

int main() {
	int i,a[100000];
	int j,k;
	int num=0;
	for(i=0;i<100;i++)
	{
	    scanf("%d",&a[i]);
	    if(a[i]==0)
	       break;
	}

    for(j=0;j<i-1;j++)
    for(k=j+1;k<i;k++)
    {
        if((a[j]/a[k]==2&&a[j]%a[k]==0)||(a[k]/a[j]==2&&a[k]%a[j]==0))
            num++;
    }
    printf("%d\n",num);
	return 0;
}

未完待续

发布了55 篇原创文章 · 获赞 14 · 访问量 3371

猜你喜欢

转载自blog.csdn.net/weixin_41969690/article/details/103631764