常见简单编程题

程序接收用户输入的一个4位整数,通过将数字的每一位存储并倒序,然后比较原数与倒序后的数是否相等来判断是否为回文数。利用append()函数添加数字到列表尾部,再遍历列表反向计算原数,最后比较结果输出yes或no。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断回文数

问题:
用户输入一个4位的整数,如果是回文数显示True,如果不是回文数显示False。
分析:
回文数:回文数,就是反过来的数字和正着的数字是相同的,如1221,倒过来的数还是1221,这就是一个回文数,1234倒过来是4321,不相等,就不是回文数。
append()函数将n的每位进行倒序插入,所以后面直接进行计算就可以

n=int(input("请输入一个整数"))
n1=n
s=[]
num=0
sum1=0
while n>0:
    temp=n%10
    n=n//10
    #s.insert(0,temp)
    s.append(temp)
#print(s)
for i in range(len(s)-1,-1,-1):
    #print(s[i])
    sum1+=s[i]*(10**num)
    num+=1
#print(sum1)
if sum1==n1:
    print("yes")
else:
    print("no")

高精度加减法

/*#include<iostream>
#include<vector>
using namespace std;
vector<int> add(vector<int> &A,vector<int> &B)
{
    vector<int> C;
    int carry=0;
    for(int i=0;i<A.size()||i<B.size();i++)
    {
        if(i<A.size()) carry+=A[i];
        if(i<B.size()) carry+=B[i];
        C.push_back(carry%10);
        carry=carry/10;
    }
    if(carry) C.push_back(carry);
    return C;
}
int main()
{
    string a,b;
    cin>>a>>b;
    vector<int> A,B,C;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    C=add(A,B);
    for(int i=C.size()-1;i>=0;i--) cout<<C[i];
    cout<<endl;
    return 0;
}
*/
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool comp(vector<int> &A,vector<int> &B)
{
    if(A.size()!=B.size()) return A.size()>B.size();
    for(int i=A.size()-1;i>=0;i--)
        if(A[i]!=B[i])
            return A[i]>B[i];
    return true;

    return true;
}
vector<int> sub(vector<int> &A,vector<int> &B)
{
    vector<int> C;
    for(int i=0,borrow=0;i<A.size();i++)
    {
        borrow=A[i]-borrow;
        if(i<B.size()) borrow-=B[i];
        C.push_back((borrow+10)%10);
        if(borrow<0) borrow=1;
        else    borrow=0;
    }

    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main()
{
    string a,b;
    cin>>a>>b;
    vector<int>A,B,C;

    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    if(comp(A,B)) C=sub(A,B);
    else C=sub(B,A),cout<<'-';
    for(int i=C.size()-1;i>=0;i--) cout<<C[i];
    cout<<endl;
    return 0;
}

归并排序

#include<iostream>
using namespace std;
const int N=1e5+1;
int q[N],temp[N];
int n;
void Merge_sort(int L,int R)
{
    if(L>=R) return;
    else
    {
        int mid=(L+R)>>1;
        Merge_sort(L,mid);
        Merge_sort(mid+1,R);
        int i=L,j=mid+1,k=0;
        while(i<=mid&&j<=R)
        {
            if(q[i]<=q[j]) temp[k++]=q[i++];
            else temp[k++]=q[j++];
        }
        while(i<=mid) temp[k++]=q[i++];
        while(j<=R) temp[k++]=q[j++];
        for(int i=L,j=0;i<=R;i++,j++)
        {
            q[i]=temp[j];
        }
    }
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>q[i];
    }
    Merge_sort(0,n-1);
    for(int i=0;i<n;i++) cout<<q[i]<<' ';
    return 0;
}

快速排序

#include<iostream>
using namespace std;
const int N = 1e5+10;
int a[N];
void quick_sort(int L,int R)
{
    if(L>=R) return;
    int i=L-1,j=R+1,x=a[(L+R)>>1];
    while(i<j)
    {
        while(a[++i]<x);
        while(a[--j]>x);
        if(i<j) swap(a[i],a[j]);
    }
    quick_sort(L,j);
    quick_sort(j+1,R);
}

int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    quick_sort(0,n-1);
    for(int i=0;i<n;i++) cout<<a[i]<<' ';
    return 0;
}

逆序对的数量

#include<iostream>
using namespace std;
typedef long long LL;
const int N=1e5+1;
int q[N],temp[N];
int n;
int Merge_sort(int L,int R)
{
    int res=0;
    if(L>=R) return 0;
    else
    {
        int mid=(L+R)>>1;
        res+=Merge_sort(L,mid);
        res+=Merge_sort(mid+1,R);
        int i=L,j=mid+1,k=0;
        while(i<=mid&&j<=R)
        {
            if(q[i]<=q[j]) temp[k++]=q[i++];
            else
            {
                temp[k++]=q[j++];
                res=mid-i+1;
            }
        }
        while(i<=mid) temp[k++]=q[i++];
        while(j<=R) temp[k++]=q[j++];
        for(int i=L,j=0;i<=R;i++,j++)
        {
            q[i]=temp[j];
        }
    }
    return res;
}
int main()
{
    cin>>n;
    LL num;
    for(int i=0;i<n;i++)
    {
        cin>>q[i];
    }
    num=Merge_sort(0,n-1);
    cout<<num<<endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值