logo资料库

Noip历年结果填空题(带解析).docx

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
历年程序结果题(解析版)
历年程序结果题(解析版) NOIP2011-1. #include using namespace std; int main() { int i,n,m,ans; cin>>n>>m; i=n; ans=0; while(i<=m){ //从 i=10~20,共循环计数 11 次 ans+=i; //每次循环,ans 累加一次 i 值 i++; } cout< #include using namespace std; int main() { string map= "2223334445556667778889999"; //数组中元素位置是从 0 开始计数的 string tel; int i; cin>>tel; for(i=0;i='0') && (tel[i]<='9') ) //如果输入的 tel 是 0~9,直接输出 tel 值 cout<='A') && (tel[i]<='Z'))
cout< #include using namespace std; const int SIZE= 100; int main() { int n,i,sum,x,a[SIZE]; cin>>n; memset(a,0,sizeof(a)); for(i=1;i<=n;i++){ cin>>x; a[x]++; } //循环结束时数组中的值为:a[1]=1,a[2]=2,a[3]=3,a[4]=2,a[5]=1,a[6]=2 i=0; sum=0; while(sum<(n/2+1)){ //当 sum 值大于等于 n/2+1,即 sum>=6 的时候,循环结束 i++; sum+=a[i]; } cout<
NOIP2011-4. #include using namespace std; int solve(int n,int m) { int i,sum; if(m==1) return 1; //递归函数 solve(i,m)中 m=1 时返回函数值为 1 sum=0; for(i=1;i>n>>m; cout< using namespace std; int a, b, c, d, e, ans; int main() { cin>>a>>b>>c; d = a+b; e = b+c; ans = d+e; //ans=a+b+b+c cout<
NOIP2012-2. #include using namespace std; int n, i, ans; int main() { cin>>n; ans = 0; for (i = 1; i <= n; i++) if (n % i == 0) ans++; //统计 1~18 中 18 的因数个数 cout< using namespace std; int n, i, j,a[100][100]; int solve(int x,int y) { int u, v; if(x == n) return a[x][y]; //递归边界:当 x=5 时,solve(5,y)=a[5][y] u= solve(x + 1, y); v= solve(x + 1, y + 1); if(u > v) return a[x][y] + u; else return a[x][y] + v; //用递归最终求得 solve(1,1)=a[1][1]+solve(2,2)=2+12=14 } int main() { cin>>n;
for(i = 1; i <= n; i++) for (j = 1; j <= i; j++) cin>>a[i][j]; cout< #include using namespace std; int n, ans, i, j; string s; char get(int i) { if(i < n) return s[i]; else return s[i-n]; //i<8 时,get(i)返回 s[i];i>=8 时,get(i)返回 s[i-8],从第一个开始返回 } int main() { cin>>s; n= s.size(); ans= 0; for(i = 1; i <= n-1; i++) { for (j = 0; j <= n-1; j++) if (get(i+j) < get(ans+j)) { ans = i; break; }
else if (get(i+j) > get(ans+j)) break; } //此循环执行完毕,ans=7 for(j = 0; j <= n-1; j++) cout< using namespace std; int main() { inta, b; cin>>a>>b; cout< using namespace std; int main() { int a, b, u, i, num; cin>>a>>b>>u; num = 0; for (i = a; i <= b; i++) if ((i % u) == 0) num++; //1-100 之间有多少数是 15 的倍数
cout< using namespace std; int main() { const int SIZE = 100; int n, f, i, left, right, middle, a[SIZE]; cin>>n>>f; for (i = 1; i <= n; i++) cin>>a[i]; left = 1; right = n; do { middle= (left + right) / 2; if(f <= a[middle]) right = middle; else left = middle + 1; }while (left < right); // middle=6,17>a[6],则 left=7 // middle=9,17
NOIP2013-4. #include using namespace std; int main() { constint SIZE = 100; intheight[SIZE], num[SIZE], n, ans; cin>>n; for(int i = 0; i < n; i++) { cin>>height[i]; num[i] = 1; for (int j = 0; j < i; j++) { if ((height[j] < height[i]) && (num[j] >= num[i])) num[i] = num[j]+1; } } //两两相比,得出 num[0], num[1], num[2], num[3], num[4], num[5] ans= 0; for(int i = 0; i < n; i++) { if (num[i] > ans) ans = num[i]; } //得出 num 中最大值,即在数组 height 中第几位数值最大 cout< using namespace std; int main() { int a, b, c, d, ans;
分享到:
收藏