ACM札记之一

0x1

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。

输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int a,i,j,t;
    while (cin>>a&&a)
    {
        int b[a];
        i=0;
        while (i<a)
            cin>>b[i++];
        for(i=0; i<a; i++)
            for (j=0; j<a-i-1; j++)
            {
                if (abs(b[j])<abs(b[j+1]))
                {
                    t=b[j];
                    b[j]=b[j+1];
                    b[j+1]=t;
                }
            }
        for(i=0; i<a-1; i++)
            cout<<b[i]<<" ";
        cout<<b[i]<<'\n';
    }
    return 0;
}

0X2

Problem Description

有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

Input

输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

#include <stdio.h>
int main()
{
    int n, x, a[100], i, j;
    while(scanf("%d%d",&n,&x)&&(n||x)) //这个的意思是当输入0 0时结束的
    {
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        {
            if(x<a[i])
            break;
        }
        for(j=0;j<i;j++)
        printf("%d ",a[j]);
        printf("%d",x);
        for(j=i;j<n;j++)
        printf(" %d",a[j]);
        printf("\n");
    }
    return 0;
}

0x3

输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。

#include <stdio.h>  
#include <string.h>  
int main()  
{  
    char a[100];  
    int n,i,j,k,d;  
    scanf("%d",&n);  
    while(n--)  
    {  
        scanf("%s",a);  
        d=strlen(a);  
        for(i=0,j=0;i<d;i++)  
        {  
            if(a[i]>='0'&&a[i]<='9')  
             j++;  
        }  
        printf("%d\n",j);  
    }  
    return 0;  
}

0x4

输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

#include <iostream>
 
using namespace std;
 
int main()
{
    int n,s[100],mix,i,j,k,x,temp;
    while(cin>>n&&n!=0)
    {
        for(i=1; i<=n; i++)
        {
            cin>>s[i];
        }
        mix=s[1];
        for(i=1; i<=n; i++)
        {
            if(s[i]<=mix)
            {
                mix=s[i];
                x=i;
            }
            temp=s[1];
            s[1]=mix;
            s[x]=temp;
            cout<<s[1];
            for(i=2; i<=n; i++)
            {
                cout<<s[i]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
}

0x5

 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。
    #include<stdio.h>  
    int main()  
    {  
        int n,m,i,sum,num;  
        while(scanf("%d %d",&n,&m)!=EOF)  
        {  
            num=0;sum=0;  
            for(i=2;i<=n*2;i+=2)  
            {  
               sum+=i;  
               num++;  
               if(num==m&&(i!=n*2))  
               {  
               printf("%d ",sum/num);  
               num-=m;  
               sum=0;  
               }  
            }  
            if(sum==0&&num==0) continue;  
            printf("%d\n",sum/num);  
        }  
    }

0x6

给定三条边,请你判断一下能不能组成一个三角形。

Input

输入数据第一行包含一个数M,接下有M行,每行一个实例,包含三个正数A,B,C。其中A,B,C <1000;

Output

对于每个测试实例,如果三条边长A,B,C能组成三角形的话,输出YES,否则NO。

#include <iostream>
#include <algorithm>
 
 
using namespace std;
 
int main()
{
    double a[4];
    int i,n;
    cin>>n;
    while(n--)
    {
        for(i=1; i<=3; ++i)//这里的++i很关键。数组从第二个元素输入
        {
            cin>>a[i];
        }
        sort(a+1,a+4);
        if(a[1]+a[2]>a[3] && a[3]-a[2]<a[1])
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

0x7

古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284。 而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

#include <iostream>
 
using namespace std;
 
int sum(int num)
{
    int i;
    int sum=0;
    for(i=1;i<num;i++)
    {
        if(num%i==0)
            sum+=i;
    }
    return sum;
}
 
int main()
{
    int i,a,b,n,k;
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>a>>b;
        k=sum(a);
        if(k==b)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

0x8

输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。

#include <iostream>
using namespace std;
int main() {
    int a[10];
    int i,k,j;
    for(i=0;i<20;i++){
        cin>>a[i];
    }
    for(i=0;i<20;i++){
        k=i;
        a[k]=a[i];
        for(j=0;j<20;j++){
            if(k==j)
                continue;
            else
            {
                if(a[k]%a[j]==0){
                    cout<<a[k]<<endl;
                    break;
                }
            }
        }
    }
    return 0;
}

0x9

若一个数(首位不为0)从左到右读与从右到左读都是一样,这个数就叫做回文数,例如12521就是一个回文数。

给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。

例如:87则有:

STEP1: 87+78=165

STEP2: 165+561=726

STEP3: 726+627=1353

STEP4: 1353+3531=4884

编写一个程序,输入M(12<=M<=100),输出最少经过几步可以得到回文数。如果在8步以内(含8步)不可能得到回文数,则输出0。

#include <iostream>
 
using namespace std;
#交换数字
int reverse(int x)
{
    int num = 0;
    while(x != 0)
    {
        num = x%10 +num*10;
        x = x/10;
    }
    return num;
}
#判断回文数
int judge(int x)
{
    if(x==reverse(x))
        return 1;
    else
        return 0;
}
 
int main()
{
    int L, M;
    cin >> L;
    while(L--)
    {
        cin >> M;
        int cnt = 0;
        while(cnt <= 8)
        {
            if(!judge(M))
            {
                M = M +reverse(M);
                cnt++;
            }
            else
            {
                cout << cnt << endl;
                break;
            }
        }
        if(cnt > 8)
        {
            cout << 0 << endl;
        }
    }
    return 0;
}

除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://geekmubai.com/code/acm/511.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

硬盘故障时如何强制关机:Input/output error

如果硬盘可能会出现锁死或坏道的故障,会造成 SHELL 命令的失效,包括 reboot,powoff,,shutdown,用正常的命令是没法完成重启的。 执行这...

36540
来自专栏陈树义

高效开发技巧:为什么你下载Git项目这么慢?

笔者所在公司采用的是 GitLab 进行版本管理,但许多同事下载 Git 项目的路径是这样的: 打开浏览器 -> 输入网址 -> 查找项目地址 -> 复制项目...

37540
来自专栏云计算教程系列

如何使用Ubuntu 16.04的Django一键安装镜像

Django是一个用于快速开发Web应用程序的高级Python框架。Django一键安装程序通过Django,Nginx,Gunicorn和Postgres为您...

19750
来自专栏FreeBuf

使用CMSTP绕过AppLocker的方法介绍

CMSTP是一个与Microsoft连接管理器配置文件安装程序关联的二进制文件。它接受INF文件,这些文件可以通过恶意命令武器化,以脚本(SCT)和DLL的形式...

11730
来自专栏三杯水

系统重启后nginx reload不生效原因分析

这是一种比较少见,困扰我很久的问题,虽然这个问题很简单,但是找到根本原因还是费了不少时间,现在把分析过程分享如下。

43820
来自专栏日常分享

Linux 日常常用指令

   最近搞了一个阿里ECS,CentOS7,涉及到一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进...

17020
来自专栏运维

系统重启后ngix reload不生效原因分析

这是一种比较少见,困扰我很久的问题,虽然这个问题很简单,但是找到根本原因还是费了不少时间,现在把分析过程分享如下。

9620
来自专栏运维小白

8.2 命令历史

命令历史 history //查看之前的命令 .bash_history //存放之前敲过的命令,在 /root/ 目录下 最大10...

20360
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

42200
来自专栏云知识学习

Windows Server 2008 R2修改远程桌面连接数

计算机---属性---远程设置---勾选"允许运行任意版本远程桌面的计算机连接(较不安全)"……

1.5K130

扫码关注云+社区

领取腾讯云代金券