白书若干题

2024-02-17 11:10
文章标签 若干 白书

本文主要是介绍白书若干题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. P32(排列) 

  用1、2、3、…、9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出所有解。

int i,j,k;
for(i=123; i<=987/3; i++)
{j = 2*i;k = 3*i;//然后判断ijk是否满足条件(1到9不重不漏)    
} next_permutation等全部重拍,然后判断是否满足比例关系。 

2. P50(乘积的末三位)
  如题:输入若干个整数(可以是正数、负数或者零),输出它们的乘积的末三位。这些整数中会混入一些由大些字母组成的字符串,你的程序应当忽略他们。

  下面的我写的,没有处理正负号。

 1 #include <iostream>
 2 #include <string>
 3 #include <cctype>
 4 using namespace std;
 5 
 6 int solve(char *str)
 7 {
 8     int len = strlen(str);
 9     int ans = 0;//不是1 
10     int res = 1;
11     for(int i=0; i<len; i++)
12     {
13         if(isdigit(str[i]))
14         {
15             ans = ans*10 + (str[i] - '0');
16         }else
17         {
18             if(ans!=0)
19                 res *= ans%1000;
20             /*这个有一个数字后中间再有字母,那么res就成1了 
21             if(0==res)
22                 res = 1;
23                 */
24             ans = 0;//不是1 
25         }
26     }
27     return res%1000;
28 }
29 
30 int main()
31 {
32     int i,j,k;
33     char str[100];
34     int ans = 1;
35     while(fgets(str,100,stdin)!=NULL)//以ctrl + z结束,不是+c 
36     {
37         ans *= solve(str);
38         memset(str,0,sizeof(str));
39     }
40     cout<<ans<<endl;
41     //while(1);
42     return 0;
43 }

3. P50(计算器)
 编写程序,读入一行恰好包含一个加号、减号或乘号的表达式,输出它的值。这个运算符保证是二元运算符,且两个运算数均为不超过100的非负整数。运算数和运算符可以紧挨着,也可以用一个或多个空格、Tab隔开。行首末尾均可以有空格。

View Code
 1 //实际上可以直接用一般方法,扫描 
 2 //错误 
 3 #include <iostream>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <cctype>
 7 using namespace std;
 8 
 9 int main()
10 {
11     char str[20];
12     int a,b;
13     char ch;
14     memset(str,0,sizeof(str));
15     fgets(str,20,stdin);
16     sscanf(str,"%d%[+-*]%d",&a,&ch,&b);//不知道为什么错 
17     cout<<a<<ch<<b;
18     while(1);
19     return 0;
20     
21     
22 }
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int a, b;
 7     char oper;
 8     cin >> a;
 9     //cin.get()是保留回车在输入流队列中的.而cin是丢弃回车的.
10     do{
11         //ch=cin.get();               //或者cin.get(ch);
12         cin.get(oper);          // 这题只要灵活运用 istream &get( char &ch );
13     }while(!('+' == oper || '-' == oper  || '*' == oper) );
14     cin >> b;
15     if('+' == oper){
16         cout << a + b << endl;
17     }
18     else if('-' == oper){
19         cout << a - b << endl;
20     }
21     else{  // *
22         cout << a * b << endl;
23     }
24     return 0;
25 }

4. P50(手机键盘)

  采用二维数组或者一维数组,采用一位数组的话存储第一个字母 。

5. P67(解方程组)

  编写一个 函数solve,给定浮点数a, b, c, d, e, f,求解方程组af + by = c, dx + ey = f。

  任务1:使用assert宏,让解不唯一时异常退出。  

assert(b*d!=a*e);

  任务2:解不唯一时仍然正常返回,但调用者有办法知道解的数量(无解、唯一解、无穷多组解)。

View Code
 1 #include<iostream>
 2  #include<cassert>
 3  using namespace std;
 4  
 5  double x, y;
 6  int solve(double a, double b, double c, double d, double e, double f)
 7  {
 8      if(b*d==a*e)
 9          return 0;
10      y = (c*d-a*f)/(b*d-a*e);
11      x = (c-b*y)/a;
12      return 1;
13  }
14  int main()
15  {
16      double a, b, c, d, e, f;
17      cout << "Please input some values!" << endl;
18      while(cin >> a >> b >> c >> d >> e >> f)
19      {
20          if(!solve(a, b, c, d, e, f))
21              cout << "无穷多解!!" << endl;
22          else
23          cout << x << "  " << y << endl;
24      }
25      return 0;
26  }

6.

 

转载于:https://www.cnblogs.com/hxsyl/archive/2013/03/25/2981627.html

这篇关于白书若干题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717585

相关文章

概率DP (由一道绿题引起的若干问题。目前为一些老题,蒟蒻的尝试学习1.0)

概率DP: 利用动态规划去解决 概率 期望 的题目。 概率DP 求概率(采用顺推) 从 初始状态推向结果,同一般的DP类似,只是经历了概率论知识的包装。 老题: 添加链接描述 题意: 袋子里有w只白鼠,b只黑鼠,A和B轮流从袋子里抓,谁先抓到白色谁就赢。A每次随机抓一只,B每次随机 抓完一只后 会有另外一只随机老鼠跑出来。如果两个人都没有抓到白色,那么B赢。A先抓,问A赢得概率。 w b 均在

QT窗体Widget使用的若干问题

这里介绍的是widget 窗体的属性 最完整的属性请查看qt自带的帮助文档,这里之拿了一部分做说明 窗体属性: object name:物件名称 qwidget:enable 使能本部件 geometry:窗口位置和大小设置 sizepolicy: 1. Fixed: 大小不能改变 2. Minimum: 已经是最小, 不能再被缩小, 但

mapreduce将若干小文件合成大文件

1、思路: http://blog.yfteach.com/?p=815,注意原文中有一个错误,就是FileInputformat中并没有找到createRecordReader这个方法,应该在TextInputFormat中有,而不是textFileInputFormat 2、编码:       第一步:编写将整个文件作为一条记录处理的类,即实现FileInputFormat. 注意:F

AC自动机 白书模板

模板: struct ACauto{ int ch[maxn][26]; int sz; int f[maxn],last[maxn],val[maxn],cnt[maxn]; void init() { sz=1; memset(ch[0],0,sizeof ch[0]); memset(cnt,0,sizeof cnt); } int idx(char c) { return c-'

(白书训练计划)UVa 12627 Erratic Expansion(递归+找规律)

题目地址:UVa 12627 这题是先找规律,规律在于对于第k个小时的来说,总是可以分成右下角全是蓝色气球,右上角,左下角与左上角三个一模一样的k-1个小时的气球。这样的话,规律就很清晰了,然后用递归做比较方便。。。 代码如下: #include <iostream>#include <cstdio>#include <string>#include <cstring>#incl

(白书训练计划)UVa 11134 Fabled Rooks(贪心)

题目地址:UVa 11134 这题因为行与列是无关的,互无影响的。所以可以将行或列分开来计算。这就相当于转化成了在期间[1,n]内选择n个不同的整数,使得第i个整数在闭区间[Li,Ri]内。这就转换成了一个贪心问题了。但是注意不能先按照左端点排序,再按右端点排序,然后尽量往左边放,比如,(1,1),(1,3),(2,2),这样是不对的,应该按右端点为主关键字排序,再按左端点为次关键字排序。看到网

(白书训练计划)UVa 11572 Unique Snowflakes(窗口滑动法)

题目地址:UVa 11572 这种方法以前接触过,定义两个指针,不断从左向右滑动,判断指针内的是否符合要求。 这个题为了能快速判断是否有这个数,可以用STL中的set。 代码如下: #include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include

(白书训练计划)UVa 11054 Wine trading in Gergovia(等价转换)

题目地址:UVa 11054 很巧妙的一道题,这题是利用的等价转换,对每一条路来说,假如右边生产的比左边的多x,那么不管起点是哪,终点是哪,都可以把左右两侧的看成两个点,要从这条路上运送x个劳动力。再由于总和是0,所以只需要算出一端的总和就可以,这样只要遍历一遍就可以算出来了。写出代码就很简单了。。。 代码如下: #include <iostream>#include <stdio.h

(白书训练计划)UVa 1152 4 Values whose Sum is 0(中途相遇法。。)

题目地址:UVa 1152 先枚举A集合与B集合的和,存起来,然后再枚举C集合与D集合的和,看与存起来的值有多少个是互为相反数的。水题。找存起来的值时可以用二分找。 代码如下: #include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <m

数论的若干定理

素数定理:记为小于等于的素数个数,那么有   题目:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=117     定理:设,,那么有   题目:http://acm.hdu.edu.cn/showproblem.php?pid=2685     定理:设,,那么