- T.MH 的博客
22-回文数-课堂笔记
- 2024-8-24 13:53:47 @
int 类型范围 -2147483648~2147483647 一共10位最高位不超过2,负数比正数多一个负0当做负数最小值。 四位回文数 五位回文数
// 字符串方式判断回文数
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
for(int i=0,j=s.length()-1;i<=j;i++,j--){
if(s[i]!=s[j]){
cout<<"no";
return 0;
}
}
cout<<"yes";
return 0;
}
#include<bits/stdc++.h>
using namespace std;
bool huiwen(string s){ // 字符串判断回文
for(int i=0,j=s.length()-1;i<=j;i++,j--){
if(s[i]!=s[j]){
return 0;
}
}
return 1;
}
int main(){
string s;
cin>>s;
if(huiwen(s)) cout<<"yes";
else cout<<"no";
return 0;
}
//回文质数
#include<bits/stdc++.h>
using namespace std;
bool prime(int num){
/*
if(num==1) return 0;
for(int i=2;i*i<=num;i++){
if(num%i==0)return 0;
}
return 1;
*/
if(num==1) return 0;
for(int i=2;i*i<=num;i++){
if(num%i==0)return 0;
}
return 1;
}
bool huiwen(int num){ // 数字判断回文
int t=num,sum=0;
while(num>0){// 此处,若更为while(num),则会超时,打开O2优化
sum=sum*10+num%10;
num/=10;
}
if(t==sum){
return true;
}
return false;
}
int main(){
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++){
if(huiwen(i)){
if(prime(i))
cout<<i<<endl;
}
}
return 0;
}
作业:
/*
输入一个5行5列的二维数组,
然后输入x行,每行两个数表示数组中的某一个位置,
输出x行,每行一个整数,表示每一个位置所在行和列的所有元素之和。
注意:本题下标从1开始,(1,2) 表示第一行第二个。
时间限制:1000ms
内存限制:128MB
样例组
输入#1
10 12 14 16 17
21 32 18 91 65
19 21 43 54 87
11 24 32 43 53
20 30 10 18 60
3
1 2
2 3
3 4
输出#1
176
326
392
*/
#include<bits/stdc++.h>
using namespace std;
int main(){
int num[6][6],n,x,y;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>num[i][j];
}
}
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y;//num[x][y]
int s=0;
for(int j=1;j<=5;j++){
s+=num[x][j];// x这一行
s+=num[j][y]; // y这 一列
}
s-=num[x][y];
cout<<s<<endl; //换一行
}
return 0;
}
/*
给定一个5×5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
时间限制:1000ms
内存限制:128MB
输入格式
输入包含一个5行5列的矩阵。
输出格式
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"。
样例组
输入#1
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
输出#1
4 1 8
*/
#include<bits/stdc++.h>
using namespace std;
int num[6][6],n,x,y;
bool andian(int x,int y){
int m1=num[x][y],m2=num[x][y];
for(int i=1;i<=5;i++){
m1=max(num[x][i] , m1);// 打擂台找x行最大
m2=min(num[i][y] , m2);// 找y行最小
}
return m1==num[x][y] && m2==num[x][y];
}
int main(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
cin>>num[i][j];
}
}
int cnt=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(andian(i,j)){
cout<<i<<" "<<j<<" "<<num[i][j]<<" ";
cnt++;
}
}
}
if(cnt==0) cout<<"not found";
return 0;
}