智能车任务四

1、 计算电池电压

设计一个程序,读入给定的电池数据文件,提取出其中的 v1~v18 组电池电压数据,并计算每行的总电压,输出“行号 总电压”。

程序仅需进行一个文件的计算,群文件中会提供一个示例 文件,但此文件仅供参考格式,数据及数据组数没有参考意义。

文件绝对路径:/home/RunSpace/4011.txt 文件权限为只读
输入:无

输出:1、格式为“行号(及 IDX) 总电压”,每行数据占
一行;

2、总电压格式输出为三位小数。

样例输入

IDX STEP WORK TIME LOOP ALARM Cur Vol Cap Tmp v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24
1 1 44 00:10:01 1 80 -6.00 230.00 0.99 0.00 12.789 12.787 12.765 12.774 12.792 12.784 12.799 12.799 12.785 12.790 12.783 12.788 12.762 12.793 12.799 12.775 12.782 12.722 0.010 0.005 0.004 0.002 0.002 0.008
2 1 44 00:20:01 1 80 -6.00 226.70 1.99 0.00 12.702 12.693 12.683 12.690 12.695 12.698 12.714 12.702 12.698 12.701 12.699 12.692 12.687 12.704 12.697 12.692 12.694 12.630 0.002 0.007 0.011 0.002 0.003 0.009
3 1 44 00:30:01 1 80 -6.00 224.90 2.99 0.00 12.600 12.596 12.582 12.578 12.603 12.593 12.606 12.600 12.592 12.597 12.591 12.590 12.581 12.601 12.604 12.592 12.589 12.526 0.008 0.005 -0.002 0.012 0.018 0.007
4 1 44 00:40:01 1 80 -6.00 222.90 3.99 0.00 12.486 12.485 12.465 12.471 12.482 12.487 12.493 12.494 12.491 12.484 12.484 12.481 12.472 12.491 12.496 12.484 12.477 12.409 0.006 0.011 0.003 0.014 0.001 0.001
5 1 44 00:50:01 1 80 -6.00 220.90 4.99 0.00 12.369 12.360 12.353 12.358 12.360 12.368 12.383 12.374 12.360 12.368 12.368 12.361 12.357 12.373 12.365 12.349 12.367 12.300 0.005 0.005 0.006 0.006 0.003 0.008
6 1 44 01:00:01 1 80 -6.00 218.60 5.99 0.00 12.236 12.230 12.224 12.230 12.230 12.235 12.254 12.246 12.235 12.237 12.237 12.236 12.221 12.245 12.246 12.227 12.233 12.171 0.006 0.006 0.007 0.007 0.001 0.009
7 1 44 01:10:01 1 80 -6.00 216.20 6.99 0.00 12.105 12.098 12.079 12.085 12.095 12.099 12.112 12.112 12.098 12.095 12.098 12.097 12.082 12.105 12.106 12.088 12.095 12.032 0.007 0.005 0.006 0.006 0.005 0.010
8 1 44 01:20:02 1 80 -6.00 213.40 7.99 0.00 11.950 11.947 11.938 11.934 11.940 11.957 11.966 11.957 11.951 11.952 11.944 11.947 11.941 11.952 11.952 11.947 11.952 11.874 0.006 0.010 0.005 0.002 0.007 0.007
9 1 44 01:30:02 1 80 -6.00 210.60 8.99 0.00 11.797 11.799 11.782 11.778 11.789 11.805 11.811 11.808 11.797 11.802 11.792 11.790 11.792 11.805 11.796 11.795 11.799 11.716 0.010 0.011 0.003 0.003 0.010 0.008
10 1 44 01:40:00 1 80 -6.00 207.70 9.99 0.00 11.634 11.638 11.616 11.614 11.626 11.640 11.649 11.646 11.635 11.632 11.624 11.629 11.628 11.637 11.636 11.636 11.627 11.549 0.011 0.006 0.003 0.008 0.008 0.005

样例输出

1 230.068

2 228.471

3 226.621

4 224.632

5 222.493

6 220.173

7 217.681

8 215.001

9 212.253

10 209.296

#include <stdio.h>

char s[1000];
double x = 0,sum = 0;
int cnt = 0;
int main()
{
    FILE *fp;
    fp = fopen("/home/RunSpace/4011.txt","r");
    int i;
    for (i = 0; i < 34; i++)
        fscanf(fp,"%s",s);

    while (fscanf(fp,"%s",s) != EOF)
    {
        sum = 0;
        for (i = 0; i < 9; i++)
        {
            fscanf(fp,"%s",s);
        }
        for (i = 0; i < 18; i++)
        {
            fscanf(fp,"%lf",&x);
            sum += x;
        }
        cnt ++;
        printf("%d %.3f\n",cnt,sum);
        for (i = 0; i < 6; i++)
        {
            fscanf(fp,"%s",s);
        }
    }
    fclose(fp);
    return 0;
}

2、  24点plus
使用逆波兰表达式的方法计算 24 点中的算式,输入 4 个数字,输出最接近 24 点的答案,如果有两个同样接近的,输出较
小的一个。

数字的顺序可以改变,可以使用加减乘除参与运算。
有多组数据参与运算,每组数据占一行。
输入:每行 4 个数字,以空格间隔
输出:最接近 24 的数字,每组输出占一行,结果保留 3 位小数

输入示例:

10 18 20 15

15 3 5 14

4 16 13 4

14 15 4 8

19 16 4 2

输出示例:

24.000

24.000

23.250

23.286

23.125

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <math.h>
  4 #define eps 1e-8
  5
  6 char a[10], b[10], c[10], d[10],s[100];
  7 char operate[4] = {‘+‘,‘-‘,‘*‘,‘/‘};
  8 int fin[1000];
  9 double dig[1000];  //数字栈
 10 char ope[1000];  //运算符栈
 11 int pri[1000];  //存储运算符优先级
 12
 13 int Create(char[], char[], char[], char[], char, char, char);
 14 int Calculate(char *);
 15 int getdig(int, int);
 16 double cal(double, double, char);
 17 int FullArray(int, int, int);
 18 void pop(void);
 19
 20 double min;
 21 int flag,flagless = 0;
 22 int digtop, opetop;
 23
 24 int main()
 25 {
 26     int i, j, k;
 27
 28     pri[‘+‘] = pri[‘-‘] = 0;
 29     pri[‘*‘] = pri[‘/‘] = 1;
 30
 31     while(scanf("%s",a) != EOF)
 32     {
 33         flag = flagless = 0;
 34         min = 1000;
 35         scanf("%s%s%s",b, c, d);
 36         getchar();
 37         for (i = 0; i < 4; i++)
 38         {
 39             if (flag == 1)
 40                 break;
 41             for (j = 0; j < 4; j++)
 42             {
 43                 if (flag == 1)
 44                     break;
 45                 for (k = 0; k < 4; k++)
 46                 {
 47                     if (FullArray(i,j,k) == 1)
 48                     {
 49                         printf("24.000\n");
 50                         flag = 1;
 51                         break;
 52                     }
 53                 }
 54             }
 55         }
 56         if (flag == 0)
 57         {
 58             if (flagless == 1)
 59                 printf("%.3f\n",24-min);
 60             else
 61                 printf("%.3f\n",24+min);
 62         }
 63     }
 64 }
 65
 66
 67 //构造由abcdijk组成的中缀表达式
 68 //入口参数:运算符
 69 //返回:中缀表达式是否构成了24点
 70 int Create(char a[], char b[], char c[],char d[],char i, char j, char k)
 71 {
 72     int l;
 73     for (l = 0; *(s+l) != ‘\0‘; l++)
 74         *(s+l) = ‘\0‘;
 75     strcpy(s,a);
 76     s[strlen(s)] = i;
 77     strcat(s,b);
 78     s[strlen(s)] = j;
 79     strcat(s,c);
 80     s[strlen(s)] = k;
 81     strcat(s,d);
 82     //printf("%s=",s);
 83     if(Calculate(s) == 1)
 84         return 1;
 85     return 0;
 86 }
 87
 88
 89 //计算s的值
 90 //入口参数:中缀表达式
 91 //返回:是否构成24点
 92 int Calculate(char *s)
 93 {
 94     digtop = opetop = 0;  //栈顶指针
 95     int i, x, neg = 0; // neg == 1 负数
 96     for (i = 0; *(s+i) != ‘\0‘; i++)
 97     {
 98         if (fin[i] == 0)    //fin[i] = 1 表示第i位处理完毕
 99         {
100             if (s[i] >= ‘0‘ && s[i] <= ‘9‘) //数字直接入栈
101             {
102                 x = getdig(i, neg);
103                 neg = 0;
104                 dig[++digtop] = (double)x;
105             }
106             else
107             {
108                 // 两个符号相连,或者第一个字符是符号,证明遇到负数
109                 if((i>0 && (!(s[i-1] >= ‘0‘ && s[i-1] <= ‘9‘)))||(i == 0))
110                     neg = 1;
111                 else
112                 {
113                     if (opetop == 0)    //运算符栈为空直接入栈
114                         ope[++opetop] = s[i];
115                     else
116                     {
117                         while (pri[ope[opetop]] >= pri[s[i]] && opetop > 0)
118                             pop();
119                         ope[++opetop] = s[i];
120                     }
121                 }
122             }
123
124         }
125     }
126
127     while (opetop > 0)
128         pop();
129
130     if (fabs(dig[digtop]-24) < eps)     //找到24点
131         return 1;
132     if (fabs(dig[digtop]-24) < min)
133     {
134         min = fabs(dig[digtop]-24);
135         if (dig[digtop] < 24)
136             flagless = 1;
137         else
138             flagless = 0;
139     }
140     //printf("%.3f\n",dig[digtop]);
141     if (fabs(dig[digtop]-24) == min)
142         if (dig[digtop] < 24)
143             flagless = 1;
144
145     for (i = 0; *(s+i) != ‘\0‘; i++)
146         fin[i] = 0;
147     return 0;
148 }
149
150 //弹出两个元素运算
151 //入口参数:无
152 //返回:无
153 void pop(void)
154 {
155     double a, b;
156     char c;
157     a = dig[digtop--];
158     b = dig[digtop];
159     c = ope[opetop--];
160     dig[digtop] = cal(a,b,c);
161 }
162
163
164 //返回从第i位开始的数字
165 //入口参数:数字的第一个字符在字符串s中的位置i
166 //返回:数字
167 int getdig(int i, int neg)
168 {
169     int x = s[i] - 48;
170     fin[i] = 1;
171     while (1)
172     {
173         i++;
174         if (i == strlen(s))
175             break;
176         if (*(s+i) < ‘0‘ || *(s+i) > ‘9‘)
177             break;
178         fin[i] = 1;
179         x *= 10;
180         x += s[i] - 48;
181     }
182     if (neg == 1)
183         return x*(-1);
184     return x;
185 }
186
187 //计算
188 //入口参数:数 运算符
189 //返回:结果
190 double cal(double x, double y, char c)
191 {
192     switch (c)
193     {
194         case ‘+‘:
195             return x+y;
196         case ‘-‘:
197             return y-x;
198         case ‘*‘:
199             return x*y;
200         case ‘/‘:
201             if (x != 0)
202                 return y/x;
203     }
204     return -100000;
205 }
206
207
208
209 //全排列
210 //入口参数:运算符
211 //返回:构成24点返回1
212 int FullArray(int i, int j, int k)
213 {
214     //a
215     if(Create(a,b,c,d,operate[i],operate[j],operate[k]) == 1)   return 1;
216     if(Create(a,b,d,c,operate[i],operate[j],operate[k]) == 1)   return 1;
217     if(Create(a,c,d,b,operate[i],operate[j],operate[k]) == 1)   return 1;
218     if(Create(a,c,b,d,operate[i],operate[j],operate[k]) == 1)   return 1;
219     if(Create(a,d,c,b,operate[i],operate[j],operate[k]) == 1)   return 1;
220     if(Create(a,d,b,c,operate[i],operate[j],operate[k]) == 1)   return 1;
221     //b
222     if(Create(b,a,c,d,operate[i],operate[j],operate[k]) == 1)   return 1;
223     if(Create(b,a,d,c,operate[i],operate[j],operate[k]) == 1)   return 1;
224     if(Create(b,c,d,a,operate[i],operate[j],operate[k]) == 1)   return 1;
225     if(Create(b,c,a,d,operate[i],operate[j],operate[k]) == 1)   return 1;
226     if(Create(b,d,a,c,operate[i],operate[j],operate[k]) == 1)   return 1;
227     if(Create(b,d,c,a,operate[i],operate[j],operate[k]) == 1)   return 1;
228     //c
229     if(Create(c,a,b,d,operate[i],operate[j],operate[k]) == 1)   return 1;
230     if(Create(c,a,d,b,operate[i],operate[j],operate[k]) == 1)   return 1;
231     if(Create(c,b,d,a,operate[i],operate[j],operate[k]) == 1)   return 1;
232     if(Create(c,b,a,d,operate[i],operate[j],operate[k]) == 1)   return 1;
233     if(Create(c,d,a,b,operate[i],operate[j],operate[k]) == 1)   return 1;
234     if(Create(c,d,b,a,operate[i],operate[j],operate[k]) == 1)   return 1;
235     //d
236     if(Create(d,a,b,c,operate[i],operate[j],operate[k]) == 1)   return 1;
237     if(Create(d,a,c,b,operate[i],operate[j],operate[k]) == 1)   return 1;
238     if(Create(d,b,a,c,operate[i],operate[j],operate[k]) == 1)   return 1;
239     if(Create(d,b,c,a,operate[i],operate[j],operate[k]) == 1)   return 1;
240     if(Create(d,c,a,b,operate[i],operate[j],operate[k]) == 1)   return 1;
241     if(Create(d,c,b,a,operate[i],operate[j],operate[k]) == 1)   return 1;
242
243     return 0;
244 }

3、  素数和幸运素数
统计并打印 1 亿以内的所有素数个数,并且打印出 1 千万以上1 亿以内的所有幸运素数(如 11110111 这样仅有 1 位不同,其它位数字都相同的素数),直接打印答案无效。

运行环境:腾讯云 1 核 1 GB 服务器,要求在 5s 之内完成
输入:无
输出:第一行为全部素数数量,之后每行从小到大输出一个幸运素数

输出示例:

576****
1111****

1111****(*为数字,此处隐藏)

*********(还有很多)

让我们复习一下线性筛

/*线性筛,保证每个数只被它最小的因子筛去*/

void Prime(void)
{
    int i, j;
    tag[0] = tag[1] = 1;
    for (i = 2; i <= N; i++)
    {
        if (tag[i] == 0)
            prime[cnt++] = i;
        for (j = 0; j < cnt; j++)
        {
            if (i*prime[j] > N)
                break;
            tag[i*prime[j]] = 1;
            if (i % prime[j] == 0)
                break;
        }
    }
}
#include <stdio.h>
#include <stdlib.h>
#define N 100000000

int tag[N];     //tag[i] = 1 代表i不是素数
int prime[N];
int c[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0};

int cnt = 0;

void Prime(void);
int Lucky(int);

int main()
{
    int i;

    Prime();

    printf("%d\n",cnt);
    for (i = 665255; i < cnt; i++)
        if (Lucky(prime[i]))
        {

            printf("%d\n",prime[i]);
        }
    return 0;
}

void Prime(void)      //线性筛
{
    int i, j;
    tag[0] = tag[1] = 1;
    for (i = 2; i <= N; i++)
    {
        if (tag[i] == 0)
            prime[cnt++] = i;
        for (j = 0; j < cnt; j++)
        {
            if (i*prime[j] > N)
                break;
            tag[i*prime[j]] = 1;
            if (i % prime[j] == 0)
                break;
        }
    }
}

int Lucky(int x)
{
    int a = x%10, b = 10, m;
    c[a] ++;
    x /= 10;
    while (x != 0)
    {
        m = x%10;
        if (m == a)
            c[a] ++;
        if (m != a)
        {
            if (b == 10)
            {
                b = m;
                c[b] ++;
            }
            else
            {
                if (m == b)
                    c[b] ++;
                if (m != b)
                {
                    c[a] = 0;
                    c[b] = 0;
                    return 0;
                }
            }

        }
        x /= 10;
    }
    if (c[a] == 1 || c[b] == 1)
    {
        c[a] = 0;
        c[b] = 0;
        return 1;
    }
    c[a] = 0;
    c[b] = 0;
    return 0;
}

原文地址:https://www.cnblogs.com/liumengyue/p/10045714.html

时间: 2024-10-21 02:23:25

智能车任务四的相关文章

飞思卡尔智能车电磁组分区算法介绍

写在之前的话: 1.目前我是一名在校学生,这也是我第一次写博客,不周之处,请多谅解: 2.此算法并非原创,借鉴自山东德州学院第八届白杨队(PS:个人看法,对于一些人把别人的开源东西改头换面一下就说是自己的原创行为十分鄙视): 3.对于此算法的理解和说明并非纸上谈兵,算法已经被我运用到了小车比赛中并取得好的成绩(具体就不多说了,比赛时车莫名其妙坏了,比赛前调试的速度绝对能进国赛,比较遗憾),总之这算法是我尝试过的最好的算法: 4.这一次所介绍的只是路径算法和一些知识普及,后面有时间会介绍其余部分算

BZOJ 2433 智能车比赛(计算几何+最短路)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2433 题意:若干个矩形排成一排(同一个x之上最多有一个矩形),矩形i和i+1相邻.给定两点S和T,两点均在矩形内.求S到T的最短路径.只能在矩形内部走. 思路:首先,S到T若有转弯,必定是在矩形 的顶点处转弯.因此,只要建立任意两可达顶点(包含S和T)之间距离求最短路即可.若暴力枚举任意两点再判是否可达复杂度O(n^3).优化.枚举起点 a,从左向右扫遍矩形,利用叉积维护关于该点a的上

独立、原创、总结、分享、行动——由海滨学生参观实验室及“飞思卡尔”杯智能车比赛想到的

题记:以下内容,都是老师在和学生交流过程中发现的现象,这里主要指出了存在的问题和可能的解决方法.其实同学们也有很多的优点,这里没有一一叙述.本着"有则改之,无则加勉"的态度分享自己的感受. 今天海滨学院环境专业大二学生,在曹瑞雪博士带领下来主校区参观,其中有一个点为我们海洋遥感与信息技术实验室. 接到曹老师电话(还有20分钟到达),立即把楼顶天线的门打开,同时走了一下参观的路线.在7楼恰好看到有同学在试车(参加智能车比赛的学生,7楼是科技园的一个智能车训练场地),简单的交流了几句,了解

bzoj 2433 [Noi2011]智能车比赛 [计算几何+spfa]

Description 新一届智能车大赛在JL大学开始啦!比赛赛道可以看作是由n个矩形区域拼接而成(如下图所示),每个矩形的边都平行于坐标轴,第i个矩形区域的左下角和右上角坐标分别为(xi,1,yi,1)和(xi,2,yi,2). 题目保证:xi,1<xi,2=xi+1,1,且yi,1< yi,2,相邻两个矩形一定有重叠在一起的边(如图中虚线所示),智能车可以通过这部分穿梭于矩形区域之间. 选手们需要在最快的时间内让自己设计的智能车从一个给定的起点S点到达一个给定的终点T点,且智能车不能跑出赛

手势控制四轮智能车移动

视频请看这里 1. 输入设备 这里使用的是Andriod手机,根据加速计的来推测手势:停止,前进,后退,左右转向 2. 手机与智能车通讯 智能车上的树莓派运行一个tornado web service, 当检测到一个动作后通过http访问url即可.该web service可以驱动轮子转动

【sky第二期--PID算法】--【智能车论坛】

[sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread&tid=213301&fromuid=108990 欢迎交流

智能车学习(六)&mdash;&mdash;OLED屏幕使用

一.代码展示 1.头文件: #ifndef OLED_H_ #define OLED_H_ extern unsigned char Draw[]; extern const unsigned char Font_8x16[]; extern const unsigned char HanZi[][32]; extern const unsigned char Map[]; /*--------------------*OLED写数据*--------------------*/ void OL

智能车学习(十七)&mdash;&mdash;舵机学习

一.舵机的结构      舵机简单的说就是集成了直流电机.电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元.能够利用简单的输入信号比较精确的转动给定角度的电机系统.舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度.这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文servo.   二.舵机的规格和选型      舵机的规格主要有几个方面:转速.转矩.电压.尺寸.重量.材料等.我们在做舵机的选型时要对

飞思卡尔智能车

今年做的是光电直立,程序主要是参考官网上面给的清华的方案.原理什么的就不具体研究了,方案还有论文里面都非常的详细. 主要有三个部分:1角度控制,2速度控制,3方向控制.其中还有利用互补滤波来计算角度以及利用PID算法来进行控制. 首先是角度控制,利用陀螺仪积分来计算角度,同时由于积分会导致误差的积累,所有需要利用加速度计进行修正,这里利用的是互补滤波的算法.在加速度计计算角度的时候,我们采用的方法是,获取一个直立时候的初始值,然后让车模向左边倾斜至水平,认为此时加速度计的数值a1对应角度是90°