来自于王道机试指南视频记录
1.设N是一个四位数,它的九倍恰好是他的反序数(1234->4321),求N的值是多少。
#include<iostream>
#include<cmath>
using namespace std;
int adverse(int n)
{
int temp=0;
int sum=0;
while(n)
{
temp=n%10; //倒输出
sum=sum*10+temp;
n=n/10;
}
return sum;
}
int main()
{
for(int i=1000;i<10000;i++)
{
if(i*9==adverse(i))
cout<<i<<'\t';
}
return 0;
}
2.打印所有不超过256,其平方具有对称性质的数,如2和11就是这样的数,22=4,,1111=121;
#include<iostream>
#include<cmath>
using namespace std;
int adverse(int n)
{
int temp=0;
int sum=0;
while(n)
{
temp=n%10; //倒输出
sum=sum*10+temp;
n=n/10;
}
return sum;
}
int main()
{
for(int i=0;i<256;i++)
{
if(i*i==adverse(i*i))
cout<<i<<" ";
}
return 0;
}
3.A+B问题,如果不输入数字时则停止计算
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!= EOF) //end of file
{
printf("%d\n",a+b);
}
return 0;
}
4.日期问题
- 输入年月日,输出是今年的第几天。
思路:①分两种年②一直累加到当月,再加上当月所剩天数。
#include<iostream>
#include<cstdio>
using namespace std;
int daytab[2][13]=
{
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31} //闰年
};
bool isyear(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
{
return true; //1
}
else
{
return false; //0
}
}
int main()
{
int year,month,day;
while(scanf("%d%d%d",&year,&month,&day)!=EOF)
{
int number= 0;
int row = isyear(year);
for(int i=0; i<month; ++i)
{
number+=daytab[row][i];
}
number+=day;
cout<<number<<endl;
}
return 0;
}
- 给出年份m,和年份中的第n天,求是m年的第几月几日。
#include<iostream>
#include<cstdio>
using namespace std;
int daytab[2][13]=
{
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
bool isyear(int year)
{
if(year%4==0 && year%100!=0 || year%400==0)
{
return true; //1
}
else
{
return false; //0
}
}
int main()
{
int year,month,day;
int number;
while(scanf("%d %d",&year,&number)!=EOF)
{
month=0;
int row=isyear(year);
while( number > daytab[row][month])
{
number-=daytab[row][month];
month++;
}
day=number;
printf("%04d-%02d-%02d\n",year,month,day); //缺位补0
}
return 0;
}
5.手机键盘问题
思路:用arc2码与keytab的数值比较,如果差值相同则为同一键盘。
如 ac在同一个键盘 3 - 1 = 2 ‘c’ - ‘a’ = 2
如 ad在不同键盘 1 - 1 = 0 ‘d’ - ‘a’ = 3
#include<iostream>
#include<cstdio>
using namespace std;
int keytab[26]=
{
1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,
1,2,3,4,1,2,3,1,2,3,4
};
int main()
{
string str;
while(cin>>str)
{
int time=0;
for(int i=0 ; i<str.size() ;i++)
{
time += keytab[str[i]-'a']; //按字母本来需要的次数
if(i>0&&str[i]-str[i-1] == keytab[str[i]-'a']-keytab[str[i-1]-'a'])
time+=2; //判断为同一个键盘上需要等待2s,不在统一键盘则无等待时间
}
cout<<time<<endl;
}
return 0;
}