总结:
题目都不难,但需要细心,多尝试,然后如何把数字的每位数都拿出来是经常用到的需要掌握。
问题 A: 守形数
思路:把每一种低位存在数组中,然后平方相乘看等不等于n的平方数
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int m=n*n;
int a[10];
int b=10;
//存数组中,因为n<100所以最多有4中低位数,开5个就够了
for(int i=0;i<5;i++)
{
a[i]=m%b;
b=b*10;
}
//平方相乘
for(int i=0;i<5;i++)
{
if(a[i]*a[i]==m)
{
printf("Yes!");
break;
}
if(i==4)
printf("No!");
}
printf("\n");
}
return 0;
}
问题 B: 反序数
思路:纯纯暴力就完事了,把九倍之后的数,千位变个位,百位变十位,十位变百位,个位变千位然后对比就好了
这题需要注意点是如何把每个位置上的数组拿出来,其实可以拿数组存
,再做也可以
for(int k=0;k<4;k++)
{
a[k]=m%10;
m=m/10;
}
#include<cstdio>
int main()
{
int num,num9,sum;
for(int i=1000;i<=1111;i++)
{
num=i;num9 = 9*i;
sum = num/1000*1 + num%1000/100*10 + num%100/10*100 + num%10*1000;
if(sum == num9)
printf("%d\n",num);
}
return 0;
}
问题 C: 百鸡问题
思路:纯暴力就行了
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
int x,y,z;
while(scanf("%d",&n)!=EOF)
{
for(int x=0;x<=100;x++)
{
for(int y=0;y<=100;y++)
{
for(int z=0;z<=100;z++)
{
int zmon;//表示买3毛钱的鸡用了多少钱
if(z%3==0) zmon=z/3;
else zmon=z/3+1;
if(x+y+z==100&&5*x+3*y+zmon<=n)
{
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
}
}
}
return 0;
}
问题 D: abc
读懂题目直接暴力计算
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b,c;
for(a=0;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if(a*100+b*10+c+b*100+c*10+c==532)
printf("%d %d %d\n",a,b,c);
}
}
}
return 0;
}
问题 E: 众数
思路://首先输入20个数,存入数组中,再用另外一个数组统计每个数字出现的次数,这里用遍历整个数组,然后记录下出现次数最多的那次
这里我自己码不对,所以用的大佬的代码
链接:https://blog.csdn.net/qq_34767784/article/details/103747676
//我的
#include<iostream>
#include<cstdio>
using namespace std;
//首先输入20个数,存入数组中,再用另外一个数组统计每个数字出现的次数,这里用遍历整个数组,然后记录下出现次数最多的那次
int main()
{
int a[20];
while(scanf("%d",&a)!=EOF)
{
//用num数组来存储每个数存了几次
//max就是比较那个出现的次数多
//index就是那个数
int num[11]={0};
int max=num[1];
num[num[0]]++;
for(int i=1;i<20;i++)
{
scanf("%d",&a[i]);
num[a[i]]++;
}
int index;
for(int i=2;i<11;i++)
{
if(max<num[i])
{
max=num[i];
index =i;
}
}
printf("%d", index);
}
return 0;
}
大佬的
‘’’
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
//法一:双重数组法
int main()
{
int num[20]={0};
while(cin>>num[0])//对于数组输入多点测试的处理
{
int cnt[11]={0};
cnt[num[0]]++;
for(int i=1;i<20;i++)
{
cin>>num[i];
cnt[num[i]]++;
}
int max = cnt[1];
int max_index = 1;
int j;
for(j=2;j<11;j++)
{
if(max < cnt[j])
{
max = cnt[j];
max_index = j;
}
}
cout<<max_index<<endl;
}
return 0;
}
问题 F: 计算两个矩阵的乘积
思路:知道矩阵乘法的规则就行,然后在相乘的时候注意下代码要怎么敲
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a[2][3];
int b[3][2];
while(scanf("%d",&a)!=EOF)
{
cin>>a[0][1]>>a[0][2];
for(int i=1;i<2;i++)
{
for(int j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
scanf("%d",&b[i][j]);
}
int num[2][2];
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
num[i][j]=a[i][0]*b[0][j] + a[i][1]*b[1][j] + a[i][2]*b[2][j];
printf("%d ",num[i][j]);
}
printf("\n");
}
}
return 0;
}
问题 G: 加法等式
和D题一模一样
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b,c;
for(a=0;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if(a*100+b*10+c+b*100+c*10+c==532)
printf("%d %d %d\n",a,b,c);
}
}
}
return 0;
}
问题 H: 整数和
自己反复写错了记得检查下
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int m;
cin>>m;
while(m--)
{
int n,sum=0;
cin>>n;
if(n>=0)
{
for(int i=n;i<=2*n;i++)
sum+=i;
}
else
{
for(int i=2*n;i<=n;i++)
sum+=i;
}
cout<<sum<<endl;
}
return 0;
}
问题 I: 反序相等
和b题差不多
问题 J: 多项式的值
思路:根据题意纯纯暴力就行
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int m;//几个样例
cin>>m;
for(int i=1;i<=m;i++)
{
//sum求和,a数组是用来表示每项系数
int n,sum=0;
int a[15];
int x;
cin>>n;
for(int i=0;i<=n;i++)
cin>>a[i];
//x表示就是多少多少次方的那个x
cin>>x;
int w=0;
for(int i=0;i<=n;i++)
{
if(i==0)
{
w=1;
}
else if(i==1)
{
w=x;
}
else
{
w=w*x;
}
sum=sum+a[i]*w;
}
cout<<sum<<endl;
}
return 0;
}
问题 L: 与7无关的数
思路:根据题意,考虑各种情况,判断能否被7整除,个位数上是否有7,十位数上是否有7,然后就可以了
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int sum=0;
int a[100];
for(int i=1;i<=n;i++)
{
//判断能否被7整除,个位数上是否有7,十位数上是否有7
if(i%7==0||i%10==7||i/10==7)
continue;
sum=sum+i*i;
}
printf("%d\n",sum);
}
return 0;
}
问题 M: 鸡兔同笼
这里oj给了思路
思路:这个问题可以描述成任给一个整数 N,如果N 是奇数,输出0 0,否则如果N 是4 的倍数,输出N / 4 N / 2,如果N 不是4 的倍数,输出N/4+1 N/2。这是一个一般的计算题,只要实现相应的判断和输出代码就可以了。题目中说明了输入整数在一个比较小的范围内,所以只需要考虑整数运算就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int a=0;
cin>>a;
if(a%2==1)//奇数情况
{
cout<<"0 "<<"0"<<endl;
continue;
}
else if(a%4==0)//偶数情况,记住这里是余数为0,能被四整除
{
cout<<a/4<<" "<<a/2<<endl;
continue;
}
else
{
cout<<a/4+1<<" "<<a/2<<endl;
}
}
return 0;
}