循環!循環!循環!
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 151≤k≤15 ),要求計算出一個最小的 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(0≤x≤9) 共出現了多少次?例如,在 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 ≤ 91≤n≤1,000,000,0≤x≤9 。
思路:水;
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 }
循環!循環!循環!