简单数学编程题

1019 数字黑洞

https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968
在这里插入图片描述
在这里插入图片描述
思路:
用数组保存每位的数字,并用bool数组标记一下。
根据bool数组 判断各个数字是不是完全的相同,
相同根据题目输出
不相同用sort排序后 计算最大值 和最小值。
用差接着重复执行上面的步骤直到差为6174。
注意事项:
每次执行一次后都要重新的清零。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(void)
{
    
    
	int n;
	int temp;
	int sum1,sum2;
	int count;
	while( cin>>n )
	{
    
    	
		bool flag=false;
		while(!flag)	
		{
    
    
			temp=n;//保存一个副本 
			bool hush[10]={
    
    false};
			int a[4]={
    
    0};
			int i=0; 
			while(n)
			{
    
    
				a[i]=n%10;
				hush[a[i]]=true;
				n=n/10;
				i++;
			}
			count=0;
			if(i!=4)//说明不是4位的数  是  0012 这种的数字,0也默认出现了,所以count++
				count++;
			for(i=0;i<10;i++)
			{
    
    
				if(hush[i])
				{
    
    
					count++;
				}
			}
			if(count==1)//说明各个位数都是同一个数
			{
    
    
				printf("%d - %d = 0000\n",temp,temp);
				flag=true;
			}
			sort(a,a+4);
			sum1=a[0]*1000+a[1]*100+a[2]*10+a[3];//小 
			sum2=a[3]*1000+a[2]*100+a[1]*10+a[0];//大 
			if(!flag) 
				printf("%04d - %04d = %04d\n",sum2,sum1,sum2-sum1);
			n=sum2-sum1;
			if(n==6174)
				flag=true;
		}
	}
	return 0;
}

书上的代码:

#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
    
    
	return a>b;
}
void to_array(int n,int num[])//将n的每一位存储到数组中 
{
    
    
	for(int i=0;i<4;i++)
	{
    
    
		num[i]=n%10;
		n=n/10;
	} 
}
int to_number(int num[])
{
    
    
	int sum=0;
	for(int i=0;i<4;i++)
	{
    
    
		sum=sum*10+num[i];
	}
	return sum;
} 
int main(void)
{
    
    
	int n,min,max;
	scanf("%d",&n);
	int num[5];
	while(1)
	{
    
    
		to_array(n,num);
		sort(num,num+4);
		min=to_number(num);
		sort(num,num+4,cmp);
		max=to_number(num);
		n=max-min;
		printf("%04d - %04d = %04d\n",max,min,n);
		if(n==0||n==6174)
		{
    
    
			break;	
		}
	} 
	return 0;
}

问题 A: 守形数

http://codeup.cn/problem.php?cid=100000588&pid=0
在这里插入图片描述
注意的是: 76^2=5776 这样的也是守形数
思路:
(36-6) %10 等于0
(625-25)%100等于0
(5776-76)%100等于0
综上所述可以得出如下的结论 :
(n*n-n) % 10n的位数 ==0

#include<cstdio>
int main(void)
{
    
    
	int n;
	int max;
	int sum=1;
	while( scanf("%d",&n) != EOF )
	{
    
    
		sum=1;
		max=n*n;
		int temp;
		temp=n;
		while(temp)
		{
    
    
			sum*=10;
			temp=temp/10;
		}
		if( (max-n) % sum == 0)
		{
    
    
			printf("Yes!\n");
		}
		else
		{
    
    
			printf("No!\n");
		}
	}
	return 0;
}

问题 B: 反序数

http://codeup.cn/problem.php?cid=100000588&pid=1

在这里插入图片描述

#include<stdio.h>
int main(void)
{
    
    
	for(int i=1000;i<=9999;i++)
	{
    
    
		int sum=i*9;
		int sum2=0;
		int temp=i;
		int a[5]={
    
    0};
		if(sum>9999)
			continue;
		int j=0; 
		while(temp)
		{
    
    
			a[j]=temp%10;
			j++;
			temp=temp/10;
		}
		sum2=a[0]*1000+a[1]*100+a[2]*10+a[3];
		if(sum2==sum)
			printf("%d\n",i);
	}
	return 0;
}

问题 C: 百鸡问题

http://codeup.cn/problem.php?cid=100000588&pid=2
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
int main(void)
{
    
    
	int n;
	double sum=0;
	while( scanf("%d",&n) != EOF )
	{
    
    
		for(int i=0;i<=100;i++)
		{
    
    
			for(int j=0;j<=100;j++)
			{
    
    
				for(int z=0;z<=100;z++)
				{
    
    
					sum=i*5+j*3+z*(1/3.0);
					if(sum<=n&&(i+j+z==100))
						printf("x=%d,y=%d,z=%d\n",i,j,z); 
				}
			}
		}
	}
}

问题 D: abc

http://codeup.cn/problem.php?cid=100000588&pid=3
在这里插入图片描述

#include<cstdio>
int main(void)
{
    
    
	for(int i=0;i<=9;i++)
	{
    
    
		for(int j=0;j<=9;j++)
		{
    
    
			for(int k=0;k<=9;k++)
			{
    
    
				int sum1=i*100+j*10+k;
				int sum2=j*100+k*11;
				if(sum1+sum2==532)
				{
    
    
					printf("%d %d %d\n",i,j,k);
				}
			}
		}
	}
	return 0;
}

问题 E: 众数

http://codeup.cn/problem.php?cid=100000588&pid=4
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
int main(void)
{
    
    
	int a[11]={
    
    0};
	int number;
	int index;
	while( scanf("%d",&number) != EOF )
	{
    
    
		a[number]++;
		for(int i=0;i<19;i++)
		{
    
    
			scanf("%d",&number);
			a[number]++;
		} 
		int max=-1;
		for(int i=1;i<=10;i++)
		{
    
    
			if(a[i]>max)
			{
    
    
				max=a[i];
				index=i;
			}
			a[i]=0;
		}
		printf("%d\n",index);
	}
	return 0;
}

问题 F: 计算两个矩阵的乘积

http://codeup.cn/problem.php?cid=100000588&pid=5
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
int main(void)
{
    
    
	int a[2][3]={
    
    0};
	int b[3][2]={
    
    0};
	int sum1,sum2,sum3,sum4;
	while( scanf("%d",&a[0][0]) != EOF )
	{
    
    
		scanf("%d",&a[0][1]);
		scanf("%d",&a[0][2]);
		for(int i=0;i<3;i++)
		{
    
    
			scanf("%d",&a[1][i]);
		}
		for(int i=0;i<3;i++)
		{
    
    
			for(int j=0;j<2;j++)
			{
    
    
				scanf("%d",&b[i][j]);
			}
		}
		sum1=0;
		for(int i=0;i<3;i++)
		{
    
    
			sum1=sum1+a[0][i]*b[i][0];
		}
		sum2=0;
		for(int i=0;i<3;i++)
		{
    
    
			sum2=sum2+a[0][i]*b[i][1];
		}
		sum3=0;
		for(int i=0;i<3;i++)
		{
    
    
			sum3=sum3+a[1][i]*b[i][0];
		}
		sum4=0;
		for(int i=0;i<3;i++)
		{
    
    
			sum4=sum4+a[1][i]*b[i][1];
		}
		printf("%d %d\n%d %d\n",sum1,sum2,sum3,sum4);
	}
	return 0;
}

问题 G: 加法等式

http://codeup.cn/problem.php?cid=100000588&pid=6
在这里插入图片描述

#include<cstdio>
int main(void)
{
    
    
	for(int i=0;i<=9;i++)
	{
    
    
		for(int j=0;j<=9;j++)
		{
    
    
			for(int k=0;k<=9;k++)
			{
    
    
				int sum1=i*100+j*10+k;
				int sum2=j*100+k*11;
				if(sum1+sum2==532)
				{
    
    
					printf("%d %d %d\n",i,j,k);
				}
			}
		}
	}
	return 0;
}

问题 H: 整数和

http://codeup.cn/problem.php?cid=100000588&pid=7
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
#include<cmath>
int main(void)
{
    
    
	int N,n;
	while(scanf("%d",&n) != EOF )
	{
    
    
		while(n)
		{
    
    
			scanf("%d",&N);
			int sum=0;
			for(int i=abs(N);i<=2*abs(N);i++)
			{
    
    
				sum=sum+i;
			}
			if(N<0)
			{
    
    
				sum=sum*-1;
			}
			printf("%d\n",sum);
			n--;
		}
	}
	return 0;
}

问题 I: 反序相等

http://codeup.cn/problem.php?cid=100000588&pid=8
在这里插入图片描述

#include<stdio.h>
int main(void)
{
    
    
	for(int i=1000;i<=9999;i++)
	{
    
    
		int sum=i*9;
		int sum2=0;
		int temp=i;
		int a[5]={
    
    0};
		if(sum>9999)
			continue;
		int j=0; 
		while(temp)
		{
    
    
			a[j]=temp%10;
			j++;
			temp=temp/10;
		}
		sum2=a[0]*1000+a[1]*100+a[2]*10+a[3];
		if(sum2==sum)
			printf("%d\n",i);
	}
	return 0;
}

问题 J: 多项式的值

http://codeup.cn/problem.php?cid=100000588&pid=9
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
#include<cmath>
int F(int a[],int max,int x)
{
    
    
	int sum=0;
	int m=max;
	for(int i=0;i<=max;i++)
	{
    
    
		sum=sum*x+a[m--];
	}
	return sum;
}
int main(void)
{
    
    
	int n;
	scanf("%d",&n);
	{
    
    
		while(n)
		{
    
    
			int max;
			int a[15]={
    
    0};
			scanf("%d",&max);
			for(int i=0;i<=max;i++)
			{
    
    
				scanf("%d",&a[i]);
			}
			int x;
			scanf("%d",&x);
			printf("%d\n",F(a,max,x));
			n--;
		}
	}
	return 0;
}

问题 K: 迭代求立方根

http://codeup.cn/problem.php?cid=100000588&pid=10
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
#include<cmath>
double F(int x,int n)
{
    
    
	double sum=x;
	for(int i=1;i<=n;i++)
	{
    
    
		sum=sum*2/3.0+x/(3*sum*sum);
	}
	return sum;
}
int main(void)
{
    
    
	int n,x;
	while( scanf("%d %d",&x,&n) != EOF )
	{
    
    
		printf("%.6lf\n",F(x,n));
	}
	return 0;
}

问题 L: 与7无关的数

http://codeup.cn/problem.php?cid=100000588&pid=11
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
#include<cmath>
bool judge(int n)
{
    
    
	if(n%7==0)
		return false;
	while(n)
	{
    
    
		if(n%10==7)
			return false;
		n=n/10;
	}
	return true;
}
int main(void)
{
    
    
	int n;
	while( scanf("%d",&n) != EOF )
	{
    
    
		int sum=0;
		for(int i=1;i<=n;i++)
		{
    
    
			if(judge(i))
				sum+=i*i;
		}
		printf("%d\n",sum);
	}
	return 0;
}

问题 M: 鸡兔同笼

http://codeup.cn/problem.php?cid=100000588&pid=12
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<cstdio>
#include<cmath>
int main(void)
{
    
    
	int n;
	while( scanf("%d",&n) != EOF )
	{
    
    
		while(n)
		{
    
    
			int N;
			scanf("%d",&N);
			int max,min;
			max=min=0;
			if(N%2==0)
			{
    
    
				max=N/2;
				if(N%4)
				min=N/4+1;
				else
				min=N/4;
			}
			printf("%d %d\n",min,max);
			n--;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/114987269
今日推荐