KY266 反序数
描述
设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321)
求N的值
思路
通过4次for循环进行暴力求解
需要在if中判断不为0
代码
int main() {
int a = 0, b = 0, c = 0, d = 0;
int temp1 = 0;
int temp2 = 0;
for (a=0; a < 10; a++) {
for (b=0; b < 10; b++) {
for (c=0; c < 10; c++) {
for (d=0; d < 10; d++) {
temp1 = 1000*a+100*b+10*c+d;
temp2 = 1000*d+100*c+10*b+a;
if (((temp1)*9==(temp2))&&(temp1!=0)) {
printf("%d", temp1);
}
}
}
}
}
return 0;
}
求反序数的方法
int reverse(int x) {
int revx = 0;
while (x!=0)
{
revx *= 10;
revx += x % 10;
x /= 10;
}
return revx;
}
LeetCode 7.整数反转
与上题大致相同,但是需要判断数值是否溢出
代码
class Solution {
public:
int reverse(int x) {
int revx = 0;
int flag;
if(x > 0)
flag = 1;
else if(x < 0)
flag = 0;
else if(x == 0)
return 0;
x = abs(x);
if(x > 0){
while (x!=0)
{
if (revx < INT_MIN / 10 || revx > INT_MAX / 10) {
return 0;
}
revx = revx*10;
revx += x % 10;
x /= 10;
}
}
if(flag == 0)
return -revx;
return revx;
}
};
KY267 对称平方数1
描述
打印所有不超过256,其平方具有对称性质的数。如2,11就是这样的数,因为22=4,1111=121。
思路
用反序数的方法来判断
代码
#include <stdio.h>
int reversr(int x){
int revx = 0;
while (x!=0) {
revx *= 10;
revx += x % 10;
x /= 10;
}
return revx;
}
int main() {
for (int temp = 0; temp <= 256; temp++) {
int square = temp * temp;
if(square==(reversr(square))){
printf("%d\n",temp);
}
}
return 0;
}
KY50 与7无关的数
描述
一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7, 则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和。
思路
用函数判断是否与7相关
把与7无关和7的倍数之外的数存入数组
通过数组求和
代码
#include <stdbool.h>
#include <stdio.h>
#include<iostream>
using namespace std;
bool aboutsever(int x) {
while (x != 0) {
if (x % 7 == 0) {
return true;
}
x /= 10;
}
return false;
}
int main() {
int temp;
//scanf("%d", &temp);
cin >> temp;
int *arr = new int[temp];
for (size_t j = 0; j < temp; j++) {
arr[j] = 0;
}
for (int i = 1; i <= temp; i++) {
if ((i % 7 == 0) && (aboutsever(temp) != 1)) {
//arr[i] = temp;
}
else if ((i % 7 != 0) && (aboutsever(temp) == 1)) {
//arr[i] = temp;
}
else {
arr[i] = temp;
}
}
int ret = 0;
for (size_t i = 0; i <= temp; i++) {
ret += ((arr[i]) * (arr[i]));
}
//printf("%d", ret);
cout << ret << endl;
return 0;
}
代码不能解决问题
问题应该出在for循环中
对相关的判断有问题
for循环中相加也有问题
代码2
#include <stdbool.h>
#include <stdio.h>
bool aboutsever(int x) {
if (x % 7 == 0)
return false;
while (x) {
if (x % 10 == 7) {
return false;
}
x /= 10;
}
return true;
}
int main() {
int temp = 0;
int ret = 0;
scanf("%d",&temp);
for (int i = 1; i <= temp; i++) {
if (aboutsever(i))
ret += (i * i);
}
printf("%d",ret);
return 0;
}
KY156 百鸡问题
描述
用小于等于n元去买100只鸡,大鸡5元/只,小鸡3元/只,还有1/3元每只的一种小鸡,分别记为x只,y只,z只。编程求解x,y,z所有可能解。
思路
用3次for循环
int main() {
int x = 0,y = 0, z = 0,n;
scanf("%d",&n);
for (x = 0; x <= 100; x++) {
for (y = 0; y <= 100; y++) {
for (z = 0; z <= 100; z++) {
if (((x*15+y*9+z) <= 3*n)&&((x+y+z)==100)) {
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
}
}
return 0;
}
需要注意小数,1/3应该将所有倍数都扩大3
KY95 Old Bill
描述
思路
两层for循环遍历开头结尾两个数
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,x,y,z,sum,flag=0;
while(cin>>n){
cin>>x>>y>>z;
flag=0;
for(int i=9;i>0;i--){
for(int j=9;j>=0;j--){
sum=i*10000+x*1000+y*100+z*10+j;
if(sum%n==0){
printf("%d %d %d\n",i,j,sum/n);
flag=1;
}
if(flag) break;
}
if(flag) break;
}
if(!flag) cout<<0<<endl;
}
return 0;
}