資訊學奧賽一本通(C++版) 第一部分 C++語言 第四章 迴圈結構的程式設計
阿新 • • 發佈:2019-01-08
//1091 求階乘的和
#include <stdio.h>
int f(int n){
int i,ans=1;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int main(){
int n,i,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum+=f(i);
printf("%d",sum);
return 0;
}
//1092 求出e的值
#include <stdio.h>
long long f(int n){
int i;
long long ans=1;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int main(){
int n,i;
double e=0;
scanf("%d",&n);
for(i=0;i<=n;i++)
e+=1.0/f(i);
printf("%.10lf",e);
return 0;
}
//1093 計算多項式的值
//該題要小心,n<=10^6,一不小心,要超時 ,一開始很輕鬆編出程式碼,但測試中發現超時
//馬上進行修改,提交 未通過,將float全改成double ,提交AC,上了題目的當,題中說
//"保證最終結果在float範圍內",瞎扯,記住了用double不會錯。
#include <stdio.h>
int main(){
int i,n;
double x,ans=1,t=1;
scanf("%lf%d",&x,&n);
for(i=1;i<=n;i++){
t*=x;
ans+=t;
}
printf("%.2lf",ans);
return 0;
}
//1094 與7無關的數
#include <stdio.h>
int f(int n){
if(n%7==0)return 1;
while(n){
if(n%10==7)return 1;
n/=10;
}
return 0;
}
int main(){
int n,i,ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(f(i)==0)
ans+=i*i;
printf("%d",ans);
return 0;
}
//1095 數1的個數
#include <stdio.h>
int f(int n){
int cnt=0,i;
while(n){
if(n%10==1)cnt++;
n/=10;
}
return cnt;
}
int main(){
int i,cnt=0,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
cnt+=f(i);
printf("%d",cnt);
return 0;
}
//1096 數字統計
#include <stdio.h>
int f(int n){
int i,cnt=0;
while(n){
if(n%10==2)cnt++;
n/=10;
}
return cnt;
}
int main(){
int left,right,i,ans=0,cnt=0;
scanf("%d%d",&left,&right);
for(i=left;i<=right;i++){
cnt+=f(i);
}
printf("%d",cnt);
return 0;
}
//1097 畫矩形
//提交,未通過,一測試,發現是自己編碼的問題,修改,提交AC
#include <stdio.h>
int main(){
int row,col,i,j,cmd;
char s[2];
scanf("%d%d%s%d",&row,&col,s,&cmd);
if(cmd==1)
for(i=1;i<=row;i++){
for(j=1;j<=col;j++){
printf("%c",s[0]);
}
printf("\n");
}
else{
for(j=1;j<=col;j++)
printf("%c",s[0]);
printf("\n");
for(i=2;i<=row-1;i++){
for(j=1;j<=col;j++)
if(j==1||j==col)
printf("%c",s[0]);
else
printf(" ");
printf("\n");
}
for(j=1;j<=col;j++)
printf("%c",s[0]);
printf("\n");
}
return 0;
}
//1098 質因數分解
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n);
for(i=2;i*i<=n;i++)
if(n%i==0){
printf("%d",n/i);
break;
}
return 0;
}
//1099 第n小的質數
//樣例解釋2 3 5 7 11 13 17 19 23 29
#include <stdio.h>
int isPrime(int n){
int i;
if(n<2)return 0;
if(n==2)return 1;
for(i=2;i*i<=n;i++)
if(n%i==0)return 0;
return 1;
}
int main(){
int n,k=2,cnt=1;
scanf("%d",&n);
while(cnt<n){
k++;
while(isPrime(k)==0)k++;
cnt++;
}
printf("%d",k);
return 0;
}
//1100 金幣
#include <stdio.h>
int main(){
int n,ans=0,i,d=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
d+=i;
ans+=i*i;
if(d>=n)
break;
}
if(d==n)printf("%d",ans);
else printf("%d",ans-(d-n)*i);
return 0;
}
//1101 不定方程求解
//思路 列舉
#include <stdio.h>
int main(){
int a,b,c,cnt=0,i,j;
scanf("%d%d%d",&a,&b,&c);
for(i=0;i<=c;i++)
for(j=0;j<=c;j++)
if(a*i+b*j==c)cnt++;
else if(a*i+b*j>c)break;
printf("%d",cnt);
return 0;
}
2017-10-22 14:05 AC該節內容
#include <stdio.h>
int f(int n){
int i,ans=1;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int main(){
int n,i,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum+=f(i);
printf("%d",sum);
return 0;
}
//1092 求出e的值
#include <stdio.h>
long long f(int n){
int i;
long long ans=1;
for(i=1;i<=n;i++)
ans*=i;
return ans;
}
int main(){
int n,i;
double e=0;
scanf("%d",&n);
for(i=0;i<=n;i++)
e+=1.0/f(i);
printf("%.10lf",e);
return 0;
}
//1093 計算多項式的值
//該題要小心,n<=10^6,一不小心,要超時 ,一開始很輕鬆編出程式碼,但測試中發現超時
//馬上進行修改,提交 未通過,將float全改成double ,提交AC,上了題目的當,題中說
//"保證最終結果在float範圍內",瞎扯,記住了用double不會錯。
#include <stdio.h>
int main(){
int i,n;
double x,ans=1,t=1;
scanf("%lf%d",&x,&n);
for(i=1;i<=n;i++){
t*=x;
ans+=t;
}
printf("%.2lf",ans);
return 0;
}
//1094 與7無關的數
#include <stdio.h>
int f(int n){
if(n%7==0)return 1;
while(n){
if(n%10==7)return 1;
n/=10;
}
return 0;
}
int main(){
int n,i,ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
if(f(i)==0)
ans+=i*i;
printf("%d",ans);
return 0;
}
//1095 數1的個數
#include <stdio.h>
int f(int n){
int cnt=0,i;
while(n){
if(n%10==1)cnt++;
n/=10;
}
return cnt;
}
int main(){
int i,cnt=0,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
cnt+=f(i);
printf("%d",cnt);
return 0;
}
//1096 數字統計
#include <stdio.h>
int f(int n){
int i,cnt=0;
while(n){
if(n%10==2)cnt++;
n/=10;
}
return cnt;
}
int main(){
int left,right,i,ans=0,cnt=0;
scanf("%d%d",&left,&right);
for(i=left;i<=right;i++){
cnt+=f(i);
}
printf("%d",cnt);
return 0;
}
//1097 畫矩形
//提交,未通過,一測試,發現是自己編碼的問題,修改,提交AC
#include <stdio.h>
int main(){
int row,col,i,j,cmd;
char s[2];
scanf("%d%d%s%d",&row,&col,s,&cmd);
if(cmd==1)
for(i=1;i<=row;i++){
for(j=1;j<=col;j++){
printf("%c",s[0]);
}
printf("\n");
}
else{
for(j=1;j<=col;j++)
printf("%c",s[0]);
printf("\n");
for(i=2;i<=row-1;i++){
for(j=1;j<=col;j++)
if(j==1||j==col)
printf("%c",s[0]);
else
printf(" ");
printf("\n");
}
for(j=1;j<=col;j++)
printf("%c",s[0]);
printf("\n");
}
return 0;
}
//1098 質因數分解
#include <stdio.h>
int main(){
int n,i;
scanf("%d",&n);
for(i=2;i*i<=n;i++)
if(n%i==0){
printf("%d",n/i);
break;
}
return 0;
}
//1099 第n小的質數
//樣例解釋2 3 5 7 11 13 17 19 23 29
#include <stdio.h>
int isPrime(int n){
int i;
if(n<2)return 0;
if(n==2)return 1;
for(i=2;i*i<=n;i++)
if(n%i==0)return 0;
return 1;
}
int main(){
int n,k=2,cnt=1;
scanf("%d",&n);
while(cnt<n){
k++;
while(isPrime(k)==0)k++;
cnt++;
}
printf("%d",k);
return 0;
}
//1100 金幣
#include <stdio.h>
int main(){
int n,ans=0,i,d=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
d+=i;
ans+=i*i;
if(d>=n)
break;
}
if(d==n)printf("%d",ans);
else printf("%d",ans-(d-n)*i);
return 0;
}
//1101 不定方程求解
//思路 列舉
#include <stdio.h>
int main(){
int a,b,c,cnt=0,i,j;
scanf("%d%d%d",&a,&b,&c);
for(i=0;i<=c;i++)
for(j=0;j<=c;j++)
if(a*i+b*j==c)cnt++;
else if(a*i+b*j>c)break;
printf("%d",cnt);
return 0;
}
2017-10-22 14:05 AC該節內容