博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
九度oj题目&吉大考研10年机试题全解
阅读量:6546 次
发布时间:2019-06-24

本文共 1933 字,大约阅读时间需要 6 分钟。

                                                     吉大考研机试2010年题目

题目一(jobdu1478:三角形的边)、   

      给出三个正整数,计算最小的数加上次小的数与最大的数之差。

题目分析:

      简单题。能够用非常多方法解决

AC代码:

#include<iostream>
using
namespace
std;
int
main()
{
    
int
a,b,c,ma;
    
while
(cin>>a>>b>>c){
        
ma=0;
        
if
(a==0)
break
;
        
if
(ma<a) ma=a;
        
if
(ma<b) ma=b;
        
if
(ma<c) ma=c;
        
cout<<(a+b+c)-2*ma<<endl;
    
}
    
return
0;
}
题目二(jobdu1476:平方因子)、
   
    给定一个数n,判定它是否有一个不为1的全然平方数因子。

也就是说。是否存在某个k。k>1。使得k*k可以整除n。

题目分析:

      数字记录全部平方数,在小于n的情况下进行測试就可以。

AC代码:

/**
 
*简单模拟
 
*/
#include<iostream>
#include<string>
using
namespace
std;
int
main()
{
    
int
n,a[101];
    
for
(
int
i=1;i<=100;i++) a[i]=i*i;
    
while
(cin>>n&&n){
        
int
ok=0;
        
for
(
int
i=2;a[i]<=n;i++){
            
if
(n%a[i]==0){
                
cout<<
"Yes"
<<endl;
                
ok=1;
//标记是否找到满足条件的数
                
break
;
            
}
        
}
        
if
(!ok) cout<<
"No"
<<endl;
    
}
    
return
0;
}
 
题目三(jobdu1477:怪异的洗牌&&jobdu1479:移位与旋转)、  

      对一副扑克牌进行k个移位(shift)和翻转之后(filp),数组结果。

题目分析:

      因为题目数据较小。没有必要去优化移位函数(shift)的时间复杂度,仅仅须要普通的移位函数就可以,对于翻转函数,进行折半交换就可以。

AC代码:

#include<iostream>
using
namespace
std;
int
n,k;
void
shift(
int
a[],
int
k){
//向右循环k次
    
while
(k--){
        
int
tmp=a[n-1];
        
for
(
int
i=n-2;i>=0;i--){
            
a[i+1]=a[i];
        
}
        
a[0]=tmp;
    
}
}
void
filp(
int
a[],
int
n){
//翻转数组的前n个数
    
int
i,j,tmp;
    
for
(i=0,j=n-1;i<j;i++,j--){
        
tmp=a[i];
        
a[i]=a[j];
        
a[j]=tmp;
    
}
}
void
print(
int
a[]){
    
for
(
int
i=0;i<n;i++) cout<<a[i]<<
" "
;
    
cout<<endl;
}
int
main()
{
    
while
(cin>>n>>k&&n){
        
int
m,a[1005];
        
for
(
int
i=0;i<n;i++) a[i]=i+1;
        
//print(a);
        
for
(
int
i=0;i<k;i++){
            
cin>>m;
            
shift(a,n-m);
            
//print(a);
            
filp(a,n/2);
        
}
        
print(a);
    
}
    
return
0;
}
 
题目四(jobdu1466:排列与二进制)、   

      给定一个排列数,算出其二进制表示的后面有多少个连续的零。比方  p(10,5)=30240。

假设用二进制表示为p(10,5)=30240=( 111011000100000)b,也就是说。最后面有5个零。

题目分析:

      对于一个数n,n包括(可以整除几个2)几个2,其二进制末尾就有几个0。比方 n=12

12/2=6(0)    6/2=3(0)   3/2=1(1);圆括号中面表示余数,12含有2个2,12的二进制是(1100)。尾部有2个0.

AC代码:

/**
 
*一个数包括几个2,其二进制末尾就有几个0
 
*比如12=(1100) 12/2=6; 6/2=3,有两个2
 
*/
#include<iostream>
using
namespace
std;
int
main()
{
    
int
n,m;
    
while
(cin>>n>>m&&n){
        
int
cnt=0;
        
for
(
int
i=n;i>=n-m+1;i--){
            
int
k=i;
            
while
(k%2==0){
                
cnt++;
                
k/=2;
            
}
        
}
        
cout<<cnt<<endl;
    
}
    
return
0;
}

转载地址:http://zprdo.baihongyu.com/

你可能感兴趣的文章
JVM 垃圾回收机制和常见算法
查看>>
winform 记录全局异常捕获
查看>>
Advanced Message Queuing Protocol ( 1 ) 概述
查看>>
pthread线程内存布局
查看>>
c#的SortedList使用方法
查看>>
C++异常注意事项
查看>>
JAVA设计模式--单例模式
查看>>
查找小岛个数
查看>>
[转]微信小程序开发系列(一)小程序开发初体验
查看>>
关于javaweb中图片的存储问题
查看>>
Elasticsearch之启动(前台和后台)
查看>>
HTTP协议实体的基本讲解
查看>>
日志组件logback的介绍及配置使用方法
查看>>
JAVA -Xms -Xmx -XX:PermSize -XX:MaxPermSize 区别
查看>>
R语言包_dplyr_1
查看>>
yii2:引用项目外的文件或类
查看>>
set类型以及其操作
查看>>
进程 线程 协程
查看>>
阿里安卓面试分析: Android应用的闪退(crash)问题跟踪和解析
查看>>
Win10系列:C#应用控件基础19
查看>>