九度oj 專題整理 (模擬部分2)
阿新 • • 發佈:2018-12-04
整理的過程中才發現自己並不是每個題都水過的,那就邊整理邊水吧= =,今天的腦子似乎也就適合做些整理的事情了= =
題目1177:查詢
這個題目是現敲的,不過我覺得如果我的C++的字串函式用的熟練的話,應該會簡單許多= =
#include <iostream> #include <string> #include <stdio.h> #include <string.h> using namespace std; int main() { char str[110],op[110],ans[110]; int n; while(cin>>str) { cin>>n; for(int j=0; j<n; j++) { int k=0; cin>>op; memset(ans,'\0',sizeof(ans)); int len=strlen(str); if(op[0]=='0') { for(int i=0; i<op[1]-'0'; i++) { //printf("%c",str[i]); ans[k++]=str[i]; } for(int i=op[1]-'0'-1+(op[2]-'0'); i>=op[1]-'0'; i--) { //printf("%c",str[i]); ans[k++]=str[i]; } for(int i=op[1]-'0'+(op[2]-'0'); i<len; i++) { //printf("%c",str[i]); ans[k++]=str[i]; } //printf("\n"); } else if(op[0]=='1') { for(int i=0; i<op[1]-'0'; i++) { //printf("%c",str[i]); ans[k++]=str[i]; // printf("%s\n",ans); } for(int i=3; op[i]!='\0'; i++) { //printf("%c",op[i]); ans[k++]=op[i]; //printf("%s\n",ans); } for(int i=op[1]-'0'+(op[2]-'0'); i<len; i++) { // printf("%c",str[i]); ans[k++]=str[i]; // printf("%s\n",ans); } //printf("\n"); } //printf("%d\n",k); for(int i=0; i<=k; i++) { str[i]=ans[i]; } printf("%s\n",ans); } } return 0; }
在網上找了一篇使用string字串函式寫的程式碼,不過我很少用string,水題的過程中也只是常見substr(begin,length),find(char),strcpy(),幾種,連結 點選開啟連結
#include <iostream> #include <string> #include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> #define PI acos(-1) using namespace std; //1177 string s,r,t; int n; int main(){ // freopen("input.txt","r",stdin); while(cin>>t){ cin>>n; while(n--){ //t=s; cin>>r;//輸入指令 int p=r[1]-'0',l=r[2]-'0'; string tmp; if(r[0]=='0'){//翻轉 tmp=t.substr(p,l); reverse(tmp.begin(),tmp.end()); t.replace(p,l,tmp); cout<<t<<endl; } else{//替換 tmp=r.substr(3); //cout<<"tmp "<<tmp<<endl; t.replace(p,l,tmp); cout<<t<<endl; } } } return 0; }
題目1075:斐波那契數列
這個題目我完全做難了,其實完全可以寫出費波納契亞數列,然後逐層輸出即可,大概是昨天敲二維陣列模擬的程式碼,把自己的思維跑偏了,一下也會就此專題做一個簡單的總結
#include <iostream> #include <string> #include <stdio.h> #include <string.h> using namespace std; int ma[1010][1010]; int main() { int n; while(~scanf("%d",&n)) { for(int i=0; i<n; i++) { ma[i][0]=0; ma[i+1][1]=1; ma[i+1][2]=1; } for(int i=2; i<n; i++) { for(int j=3; j<i*2+1; j++) { ma[i][j]=ma[i][j-1]+ma[i][j-2]; } } for(int i=0; i<n; i++) { for(int j=0; j<i*2; j++) { printf("%d ",ma[i][j]); } printf("%d\n",ma[i][i*2]); } } return 0; }
首先是三角形的讀入與輸出,這個部分我沒練習之前第一次遇到,竟然不知所措= =,是我當時腦子懶了吧= =||,要不就是習慣了正方形或矩形的樣子,總之並不難= =
動態規劃題目 the triangle 點選開啟連結
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#define LL long long
#define PI acos(-1)
#define exp 1e-9
#define INF 0x7ffffff;
using namespace std;
int main()
{
int h;
scanf("%d",&h);
int ma[110][110];
int dp[110][110];
memset(dp,0,sizeof(dp));
for(int i=1; i<=h; i++)
{
for(int j=1; j<=i; j++)
{
scanf("%d",&ma[i][j]);
}
}
for(int i=1; i<=h; i++)
{
for(int j=1; j<=i; j++)
{
dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+ma[i][j];
}
}
int ans=0;
for(int i=1; i<=h; i++)
{
ans=max(dp[h][i],ans);
}
printf("%d\n",ans);
return 0;
}
1073 楊輝三角形
#include<stdio.h>
#include<iostream>
using namespace std;
int ma[1010][1010];
int main()
{
int n;
while(~scanf("%d",&n))
{
ma[0][0]=ma[0][1]=1;
for(int i=1; i<n-1; i++)
{
ma[i][0]=1;
ma[i][i+1]=1;
for(int j=1; j<i+1; j++)
{
ma[i][j]=ma[i-1][j-1]+ma[i-1][j];
}
}
for(int i=0; i<n-1; i++)
{
for(int j=0; j<i+1; j++)
{
printf("%d ",ma[i][j]);
}
printf("%d\n",ma[i][i+1]);
}
}
return 0;
}
看了我這三個題的程式碼,是不是一個風格呢,1075的遞迴我就不敲了,感覺自己遞迴也確實很爛,不過後面也會有專題整理的。。