码迷,mamicode.com
首页 > 其他好文 > 详细

循环!循环!循环!

时间:2018-07-13 20:47:12      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:...   eset   之间   ble   msu   bad   using   提交   原来   

 P1008 三连击

题目背景

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

将 1,2, \cdots ,91,2,?,9 共 99 个数分成 33 组,分别组成 33 个三位数,且使这 33 个三位数构成 1:2:31:2:3 的比例,试求出所有满足条件的 33 个三位数。

输入输出格式

输入格式:

 

木有输入

 

输出格式:

 

若干行,每行 33 个数字。按照每行第 11 个数字升序排列。

 

输入输出样例

输入样例#1: 复制
输出样例#1: 复制
192 384 576
* * *
...

* * *
(输出被和谐了)
思路:我选择了用代码输出,搜索;
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int flag[10];
 4 int pan(int a);
 5 void j(int a);
 6 void dfs(int t);
 7 int main(){
 8     flag[0]=1;
 9     dfs(0);
10 } 
11 int a=0,b,c;
12 void dfs(int t){
13     if(t==3){
14         b=a*2;
15         c=a*3;
16         if(pan(b)&&pan(c)){
17             printf("%d %d %d\n",a,b,c);
18         }
19         memset(flag,0,sizeof(flag));
20         flag[0]=1;
21         j(a);        
22         return ;
23     }
24     else{
25         for(int i=1;i<10;i++){
26             if(flag[i]==0){
27                 flag[i]=1;
28                 a=a*10+i;
29                 dfs(t+1);
30                 a=a/10;
31                 flag[i]=0;
32             }
33         }
34     } 
35 }
36 int pan(int z){
37     if(z>1000) return 0;
38     else{
39         while(z!=0){
40             int t=z%10;
41             z=z/10;
42             if(flag[t]==0) flag[t]=1;
43             else return 0;
44         }
45     }
46     return 1;
47 }
48 void j(int z){
49     while(z!=0){
50         int t=z%10;
51         z=z/10;
52         flag[t]=1;
53     }
54 } 

下面的这个代码是我题解里看到的,可能我的思想太禁锢了,想的都很麻烦;

这个就简单多了,我还是要多思考思考;

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 int i,j,a[15];
 6 bool ans;
 7 int main()
 8 {
 9     for (i=123;i<=329;i++)
10     {
11         a[1]=i%10;
12         a[2]=i%100/10;
13         a[3]=i/100;
14         a[4]=2*i%10;
15         a[5]=2*i%100/10;
16         a[6]=2*i/100;
17         a[7]=3*i%10;
18         a[8]=3*i%100/10;
19         a[9]=3*i/100;
20         sort(a+1,a+10);
21         ans=true;
22         for (j=1;j<=9;j++) if (a[j]!=j) ans=false;
23         if (ans) cout<<i<<" "<<i*2<<" "<<i*3<<endl;
24     }
25     return 0;
26 }

 

P1035 级数求和

题目描述

已知: S_n= 1+1/2+1/3+…+1/nSn?=1+1/2+1/3++1/n 。显然对于任意一个整数 KK ,当 nn 足够大的时候, S_nSn? 大于 KK 。

现给出一个整数 KK ( 1 \le k \le 151k15 ),要求计算出一个最小的 nn ;使得 S_n>KSn?>K 。

输入输出格式

输入格式:

 

一个正整数 KK

 

输出格式:

 

一个正整数 NN

 

输入输出样例

输入样例#1: 复制
1
输出样例#1: 复制
2
思路:水;
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     double n;
 5     scanf("%lf",&n);
 6     double sum=1;
 7     for(int i=1;i<=10000000;i++){
 8         sum=sum+1.0/(i+1);
 9         if(sum>n){
10             printf("%d",i+1);
11             break;
12         }
13     }
14 } 

P1423 小玉在游泳

题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。

输入输出格式

输入格式:

 

输入一个数字(不一定是整数,小于100m),表示要游的目标距离。

 

输出格式:

 

输出一个整数,表示小玉一共需要游多少步。

 

输入输出样例

输入样例#1: 复制
4.3
输出样例#1: 复制
3
思路:水;
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     double n;
 5     scanf("%lf",&n);
 6     double sum=0;
 7     double t=2;
 8     for(int i=1;i<=100000;i++){
 9         sum=sum+t;
10         if(sum>=n){
11             printf("%d\n",i);
12             break;
13         }
14         t=t*0.98;
15     }
16 } 

P1424 小鱼的航程(改进版)

题目背景

原来的题目太简单,现改进让小鱼周末也休息,请已经做过重做该题。

题目描述

有一只小鱼,它上午游泳150公里,下午游泳100公里,晚上和周末都休息(实行双休日),假设从周x(1<=x<=7)开始算起,请问这样过了n天以后,小鱼一共累计游泳了多少公里呢?

输入输出格式

输入格式:

 

输入两个整数x,n(表示从周x算起,经过n天,n在long int范围内)。

 

输出格式:

 

输出一个整数,表示小鱼累计游泳了多少公里。

 

输入输出样例

输入样例#1: 复制
3 10
输出样例#1: 复制
2000
思路:水;
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     long long x;
 5     long long  n;
 6     scanf("%lld %lld",&x,&n);
 7     if(x>5){
 8         long long t=8-x;
 9         n-=(long long)t;
10         x=1;
11     }
12     long long sum=0;
13     if(x+n>7){
14         n-=(8-x);
15         sum+=(250*(6-x));
16         long long t=n/7;
17         sum+=(250*5*t);
18         n%=7;
19         if(n>5) sum+=(250*5);
20         else sum+=250*n; 
21     }
22     else{
23         if(x+n>5){
24             sum+=(250*(6-x));
25         }
26         else{
27             sum+=(250*n);
28         }
29     }
30     printf("%lld\n",sum);
31 } 

P1980 计数问题

题目描述

试计算在区间 11 到 nn 的所有整数中,数字 x(0 ≤ x ≤ 9)x(0x9) 共出现了多少次?例如,在 11 到 1111 中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,数字 11 出现了 44 次。

输入输出格式

输入格式:

 

22 个整数 n,xn,x ,之间用一个空格隔开。

 

输出格式:

 

11 个整数,表示 xx 出现的次数。

 

输入输出样例

输入样例#1: 复制
11 1
输出样例#1: 复制
4

说明

对于 100\%100% 的数据, 1≤ n ≤ 1,000,000,0 ≤ x ≤ 91n1,000,000,0x9 。

思路:水;

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n,x;
 5     scanf("%d %d",&n,&x); 
 6     int sum=0;
 7     for(int i=1;i<=n;i++){
 8         int t=i;
 9         while(t){
10             if(t%10==x){
11                 sum++;
12             }
13             t/=10;
14         }
15     }
16     printf("%d\n",sum);
17 } 

 

循环!循环!循环!

标签:...   eset   之间   ble   msu   bad   using   提交   原来   

原文地址:https://www.cnblogs.com/dahaihaohan/p/9300608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!