首页 > 其他分享 >机试笔记-2

机试笔记-2

时间:2024-07-28 17:26:11浏览次数:14  
标签:10 int 31 笔记 ans 机试 main 输入

1.进制转换类问题

反序数:比如输入123,输出321

int main()
{
    int n;
    cin >> n;
    int ans = 0;
    
    while(n>0){
        ans = ans * 10;
        ans = ans + (n % 10);
        n = n / 10;
    }
    
    cout << ans << endl;
}

10进制转x进制  输入100,8     则输出144

int main()
{
    int n,x;
    char s[105]; 
    
    //输入十进制n与转化进制x
    cin >> n >> x ;
    
    int cnt = 0;
    while(n > 0){
        int w = (n % x);
        if(w < 10) s[cnt++] = w + '0' ;
        else s[cnt++] = (w - 10) + 'A' ;
        
        n = n / x;
    }
    
    for(int i = cnt -1 ; i>=0;i --){
        cout << s[i];
    }  
    
    cout << endl ;
}

x进制转10进制 

int main()
{
    char s[105]; 
    int x;
    //输入x进制字符串以及代表进制的x
    cin >> s >> x ;
    
    int ans = 0;
    int len = strlen(s);
    
    for(int i=0;i<len;i++){
        ans = ans * x;
        if(s[i] >= '0' and s[i] <= '9') ans = ans + (s[i] - '0');
        else ans = ans + (s[i] - 'A') + 10 ;
    }
    
    cout << ans << endl;
}

2.打印图形

打印棱形

int main()
{
     int n;
     cin >> n;
     //上半部分三角
     for(int i=1; i <= n;i++){
         
         for(int j=1;j<=n-i;j++){
             printf(" ");
         }
         
         for(int j = n- i+1;j<n+i;j++){
             printf("*");
         }
         
         printf("\n");
         
     }
     
     //下半部分三角,把上三角倒着输出
     for(int i=n-1; i >= 1;i--){
         
         for(int j=1;j<=n-i;j++){
             printf(" ");
         }
         
         for(int j = n- i+1;j<n+i;j++){
             printf("*");
         }
         
         printf("\n");
         
     }
}

杨辉三角

int main()
{
    int a[21][21] = {0} ;
    int n;
    while(scanf("%d",&n)!=EOF){
        if(n == 0) break;
        a[1][1] = 1;
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                a[i][j] = a[i-1][j]+a[i-1][j-1];
            }
        }

        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                printf("%d ",a[i][j]);
            }
            printf("\n");
        }
    }
}

 日期类问题:考虑闰年的判断,以及时间转换:

1天=24小时,1小时=60分,1分=60秒。

且一天之内时针和分针会重合22次,而非24次。

题目:输入1985 1 20
输出:20
解释:判断这个日期是本月的第几天。

struct node{
    int year,month,day;
}p;

int f[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int main()
{
   while(scanf("%d%d%d", &p.year, &p.month , &p.day) != EOF){
       //判断是否是闰年
       if((p.year% 400 == 0) or (p.year % 4 == 0) and (p.year % 100 !=0)) f[2]=29;
       else f[2] =28;
       
       int flag = 0;
       //判断月份与天数是否输入合法
       if(p.month < 1 or p.month > 12) flag = 1;
       if(p.day < 0 or p.day > f[p.month]) flag = 1;
       
       if(flag){
           printf("重新输入\n");
           continue;
       }
       
       int ans = p.day;
       
       for(int i=1; i< p.month;i++) ans = ans + f[i];
       
       cout << ans << endl;
   }
}

字符串类问题:将输入的字符串向后输入三位,其他不变

输入:I love 007

输出:L oryh 007

int main()
{
  char s[105];
  cin.getline(s,105);
  int len = strlen(s);
  
  for(int i= 0;i< len;i++){
      if(s[i] >='A' and s[i] <= 'Z'){
          s[i] = s[i] + 3;
          if(s[i] > 'Z') s[i] = s[i] -26;
      }else if (s[i] >='a' and s[i] <= 'z'){
          s[i] = s[i] + 3;
          if(s[i] > 'z') s[i] = s[i] -26;
      }else{
          continue;
      }
  }
  
  puts(s);
  return 0;
}

排序问题,一句话,sort()就完事。

输入:

8 1 2 3 4 5 6 7 8 输出: 1 3 5 7 2 4 6 8
bool compare(int a,int b){
    if(a % 2 == b % 2) return a < b;
    else return (a%2) > (b%2);
}

int main()
{
    int n;
    int a[1005] = {0};
    cin >> n;
    for(int i = 0;i < n ;i++){
        cin >> a[i];
    }
    sort(a,a+n,compare);
    for(int i = 0;i<n;i++){
        cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}

查找类问题:常用思想是先sort再二分查,但实际中,无脑map完事

题目:

输入:

4 01 李江 男 21 02 刘唐 男 23 03 张军 男 19 04 王娜 女 19 5 02 03 01 04 03

输出:

02 刘唐 男 23 03 张军 男 19 01 李江 男 21 04 王娜 女 19 03 张军 男 19
struct node{
    string num;
    string name;
    string sex;
    int age;
}p;

int main(){
   int n,q;
   map<string,node> M;
   while(scanf("%d",&n) != EOF){
       for(int i=0;i<n;i++){
           cin >> p.num >> p.name >> p.sex >> p.age;
           M[p.num] = p ; // 将学号指向对应结构体
       }
       scanf("%d",&q);
       for(int i=0;i<q;i++){
           string num;
           cin >> num;
           if(M.find(num) != M.end())
           cout << M[num].num <<" " << M[num].name<<" "<<M[num].sex<<" "<<M[num].age<<endl;
           else
           cout << "No!" << endl;
       }
   }
}

题目二:

输入:

5 1 2 3 4 5 3 6 6 3 输出: no find find
int main(){
    int n,q,x;
    map<int,int> M;
    scanf("%d",&n);
    
    for(int i=0;i<n;i++){
        scanf("%d",&x);
        M[x]++;
    }
    
    scanf("%d",&q);
    for(int i=0;i<q;i++){
        scanf("%d",&x);
        if(M[x] == 0){
            printf("no\n");
            M[x]++;
        }
        else printf("find\n");
    }
}

贪心问题:

商店里有 n 中饮料,第 i 种饮料有 mi 毫升,价格为 wi。 小明现在手里有 x 元,他想吃尽量多的饮料,于是向你寻求帮助,怎么样买才能吃的最多。 请注意,每一种饮料都可以只买一部分。 有多组测试数据。 第一行输入两个非负整数 x 和 n。 接下来 n 行,每行输入两个整数,分别为 mi 和 wi。 所有数据都不大于 1000。 x 和 n 都为-1 时程序结束。 请输出小明最多能喝到多少毫升的饮料,结果保留三位小数。 输入: 233 6 6 1 23 66 32 23 66 66 1 5 8 5 -1 -1 输出: 136.000
struct node{
    double w,m;
}p[1005];

bool compare(node a,node b){
    //按照每毫升的价格从低到高排序
    return a.w/a.m <b.w/b.m;
}

int main(){
   int n,x;
   while(scanf("%d%d",&x,&n) != EOF){
       if(x == -1 and n == -1) break;
       for(int i =1; i<=n;i++){
           scanf("%lf%lf",&p[i].m,&p[i].w);
       }
       sort(p+1,p+1+n,compare);
       double ans = 0;
       for(int i =1;i<=n;i++){
           if(x >= p[i].w){ 
               //如果剩余的钱能全买
               ans = ans + p[i].m;
               x = x - p[i].w;
           }else
       { //如果剩余的钱买不完
           ans =  ans + (p[i].m *x / p[i].w);
           break; //到这里x已经为0
       }
       
    }
       printf("%.3lf\n",ans);
   }

}

标签:10,int,31,笔记,ans,机试,main,输入
From: https://blog.csdn.net/xc_bbbs1/article/details/140751491

相关文章

  • ssy暑假集训暴力算法学习笔记
    7.28集训第六天今天t大学的学长peop1e来给我们讲课啦!人好帅呀嘿嘿嘿....内容如下模拟退火:定义模拟退火可以分成两个部分,一个是"模拟",一个是"退火",先介绍什么叫退火,贴一张百度百科的图吧:\(\\\)那这"退火"的定义有啥用吗?模拟退火就是用来模拟整个退火的过程(其实没啥相似......
  • 算法笔记|Day10栈与队列II
    算法笔记|Day10栈与队列II☆☆☆☆☆leetcode150.逆波兰表达式求值题目分析代码☆☆☆☆☆leetcode239.滑动窗口最大值题目分析代码☆☆☆☆☆leetcode347.前K个高频元素(待补充)题目分析代码☆☆☆☆☆leetcode150.逆波兰表达式求值题目链接:leetcode150.......
  • 算法笔记|Day9栈与队列
    算法笔记|Day9栈与队列☆☆☆☆☆leetcode232.用栈实现队列题目分析代码☆☆☆☆☆leetcode225.用队列实现栈题目分析代码☆☆☆☆☆leetcode20.有效的括号题目分析代码☆☆☆☆☆leetcode1047.删除字符串中的所有相邻重复项题目分析代码☆☆☆☆☆leetcod......
  • C++自学笔记29(多维数组)
    我们在之前的笔记中知道数组解决了重复变量的赋值问题,也知道数组就是指针可以用指针的方式修改内容。现在有一个数组对50个变量赋值a[50],我们有50个这样的数组a[50][50],对于这样的数组我们还有50个a[50][50][50]。这就是一维数组、二维数组、三维数组......我们拿堆上建立......
  • C++自学笔记30(类型双关)
    上栗子#include<iostream>intmian(){inta=50;doublever=a;std::cout<<ver<<std::endl;std::cin.get();}a是一个占据4字节的数据,将a复制给ver并转换为double8个字节。这其中就是隐式的类型转换。第一个是int类型的50,第二个是类型转换后的......
  • 心电信号测量及multisim仿真笔记
    心电信号心电信号测量无源低通滤波仿真电路原理图(二阶低通滤波)电路作用知识点补充基础概念补充运放跟随器原理图作用原理:作用:双向模拟开关电路原理图基准电压电路原理图该电路的作用导联脱落检测电路原理图作用仪器仪表放大电路原理图作用右腿驱动电路原理图放大倍......
  • AI论文阅读笔记 | Timer: Generative Pre-trained Transformers Are Large Time Serie
    一、基本信息题目:Timer:GenerativePre-trainedTransformersAreLargeTimeSeriesModels会议:ICML2024原文:https://arxiv.org/abs/2402.02368源码:​​​​​​​https://github.com/thuml/Timer二、基本内容 1、解决什么问题虽然深度学习对时间序列的分析做出了显著......
  • 【学习笔记】Matlab和python双语言的学习(熵权法)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、熵权法的基本概念二、熵权法的基本步骤1、构建决策矩阵2、数据标准化3、计算指标的比重4、计算信息熵5、计算权重6、计算综合得分三、代码实现----Matlab四、代码实现----python总结......
  • P3188 做题笔记
    题目HN省选作恶多端观察拿到题面,定睛一看:欸,这不是裸的01背包吗。但是这是道紫题,还是在省选的赛场上,应该有蹊跷。再一看到数据范围\(1\leW,w_i,v_i\le2^{30}\)这么大,是人能做的吗?观察题目,注意到保证\(w_i=a*2^b\),且\(a\le10,b\le30\)前半句不重要,......
  • MSPM0G3507外设DMA学习笔记
    概述变量的存储正常情况下,变量存储在SRAM中,如果要发送该变量的值到外设,需要调用内核操作,使SRAM中的数据送到外设。此类型操作过多会导致占用CPU高,整体卡顿。DMA控制概述DMA:DirectMemoryAccess专门用于数据传输,解放CPU对于DMA,CPU首先启动传输,然后在传输过程中执行其......