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;
}
未完待续