1 //CCF201709-1打酱油(简单计算:函数关系)
2 #include<iostream>
3 using namespace std;
4 int main(){
5 int n,temp,sum=0;
6 cin>>n;
7 temp=n/50;
8 sum+=7*temp;
9 n-=temp*50;
10 temp=n/30;
11 sum+=4*temp;
12 n-=temp*30;
13 sum+=n/10;
14 cout<<sum<<endl;
15 return 0;
16 }
1 //CCF201703-1分蛋糕(简单计算:数据分组)
2 #include<iostream>
3 using namespace std;
4 int main(){
5 int n,k,temp,i,sum=0,ans=0;
6 cin>>n>>k;
7 for(i=0;i<n;i++){
8 cin>>temp;
9 sum+=temp;
10 if(sum>=k){
11 sum=0;
12 ans++;
13 }
14 }
15 if(sum!=0)
16 ans++;
17 cout<<ans<<endl;
18 return 0;
19 }
1 //CCF201612-1中间数(排序)
2 //中间数如果存在,则一定为有序数组最中间的数
3 //反证:中间数串不经过 中间位置,则必有一半以上大于(小于)该中间数,与题意不符
4 #include<iostream>
5 #include<algorithm>
6 int a[1001];
7 using namespace std;
8 int main(){
9 int n,i,ans,right,left;
10 cin>>n;
11 for(i=0;i<n;i++){
12 cin>>a[i];
13 }
14 sort(a,a+n);//用sort(数组名,数组首地址+数组长)来排序
15 ans=a[n/2];
16 right=n/2;
17 left=n-n/2-1;
18 for(i=n/2-1;i>=0;i--){
19 if(a[i]==ans){
20 right--;
21 }else{
22 break;
23 }
24 }
25 for(i=n/2+1;i<n;i++){
26 if(a[i]==ans){
27 left--;
28 }else{
29 break;
30 }
31 }
32 if(left==right){
33 cout<<ans<<endl;
34 }else{
35 cout<<-1<<endl;
36 }
37 return 0;
38 }
1 //CCF201609-1最大波动(简单判断)
2 #include<iostream>
3 using namespace std;
4 int f(int x){//绝对值
5 return x>0?x:-x;
6 }
7 int main(){
8 int n,i,last,now,temp,ans=0;
9 cin>>n;
10 cin>>last;
11 for(i=1;i<n;i++){
12 cin>>now;
13 temp=f(now-last);
14 if(temp>ans){
15 ans=temp;
16 }
17 last=now;
18 }
19 cout<<ans<<endl;
20 return 0;
21 }
//CCF201604-1折点计数(简单判断)
#include<iostream>
using namespace std;
int main(){
int i,n,day1,day2,now,ans=0;
cin>>n;
if(n==2){
cin>>day1;
ans=0;
}else{
cin>>day1>>day2;
for(i=2;i<n;i++){
cin>>now;
if((day1>day2&&day2<now)||(day1<day2&&day2>now)){
ans++;
}
day1=day2;
day2=now;
}
}
cout<<ans<<endl;
return 0;
}
1 //CCF201512-1数位之和(字符串转数字:数字太大有必要的话)
2 // int 可以表示10^9,所以本题可直接用int存储,不用转化
3 #include<iostream>
4 using namespace std;
5 int main(){
6 int n,ans=0;
7 cin>>n;
8 while(n!=0){
9 ans+=n%10;
10 n/=10;
11 }
12 cout<<ans<<endl;
13 return 0;
14 }
1 //CCF201509-1数位之和(简单判断)
2 #include<iostream>
3 using namespace std;
4 int main(){
5 int n,i,temp1,temp2,ans=1;
6 cin>>n;
7 cin>>temp1;
8 for(i=1;i<n;i++){
9 cin>>temp2;
10 if(temp2!=temp1){
11 ans++;
12 temp1=temp2;
13 }
14 }
15 cout<<ans<<endl;
16 return 0;
17 }
1 //CCF201503-1图像旋转(矩阵坐标变换)
2 #include<iostream>
3 using namespace std;
4 int a[1001][1001];
5 int main(){
6 int row,col,i,j;
7 cin>>row>>col;
8 for(i=0;i<row;i++){
9 for(j=0;j<col;j++){
10 cin>>a[i][j];
11 }
12 }
13 for(i=col-1;i>=0;i--){
14 for(j=0;j<row;j++){
15 cout<<a[j][i]<<' ';
16 }
17 cout<<"\b\n";
18 }
19 return 0;
20 }
1 //CCF201412-1门禁系统(利用map,数组也可)
2 //map<int,int>::iterator it,其中it->first键it->second值
3 #include<iostream>
4 #include<map>
5 using namespace std;
6 int main(){
7 map<int,int> m;
8 int i,n,temp;
9 cin>>n;
10 for(i=0;i<n;i++){
11 cin>>temp;
12 m[temp]++;
13 cout<<m[temp]<<' ';
14 }
15 cout<<"\b\n";
16 return 0;
17 }
1 //CCF201409-1相邻数对(标志数组,memset(数组,初值,sizeof(数组名))用来初始化)
2 //memset要include<string.h>这一点很重要!!
3 #include<iostream>
4 #include<string.h>
5 using namespace std;
6 int a[1002];
7 int main(){
8 int n,i,temp,ans=0;
9 memset(a,0,sizeof(a));
10 cin>>n;
11 for(i=0;i<n;i++){
12 cin>>temp;
13 a[temp]=1;
14 if(a[temp+1]){//有先后次序,所以不需要去重
15 ans++;
16 }
17 if(temp!=0&&a[temp-1]==1){
18 ans++;
19 }
20 }
21 cout<<ans<<endl;
22 return 0;
23 }
1 //CCF201409-1相邻数对(标志数组结合绝对值/负值映射到正值)
2 //因为所有的数不相等,所以当同个绝对值下标落了两个数时,这两个必为相反数
3 #include<iostream>
4 #include<string.h>
5 using namespace std;
6 int a[1002];
7 int f(int x){
8 return x>0?x:-x;
9 }
10 int main(){
11 int n,i,temp,ans=0;
12 memset(a,0,sizeof(a));
13 cin>>n;
14 for(i=0;i<n;i++){
15 cin>>temp;
16 if(a[f(temp)]){
17 ans++;
18 }
19 a[f(temp)]=1;
20 }
21 cout<<ans<<endl;
22 return 0;
23 }
1 //CCF201409-1相邻数对(利用map查找)
2 #include<iostream>
3 #include<map>
4 using namespace std;
5 int main(){
6 int i,n,temp,ans=0;
7 map<int,int> m;
8 cin>>n;
9 for(i=0;i<n;i++){
10 cin>>temp;
11 if(m.find(-temp)==m.end()){
12 m[temp]++;//找不到相反数,加入自身
13 }else{
14 ans++;//找到相反数,结果加1
15 }
16 }
17 cout<<ans<<endl;
18 return 0;
19 }
1 //CCF201312-1出现次数最多的数(利用标志数组)
2 #include<iostream>
3 #include<string.h>
4 using namespace std;
5 int a[10001];
6 int main(){
7 int i,n,temp,ans=0,max=0;
8 memset(a,0,sizeof(a));
9 cin>>n;
10 for(i=0;i<n;i++){
11 cin>>temp;
12 a[temp]++;
13 if(a[temp]>max){
14 ans=temp;
15 max=a[temp];
16 }
17 }
18 cout<<ans<<endl;
19 return 0;
20 }
1 //CCF201312-1出现次数最多的数(利用map)
2 //map<int,int>::iterator it,其中it->first键it->second值
3 #include<iostream>
4 #include<map>
5 using namespace std;
6 int main(){
7 map<int,int> m;
8 int i,n,temp,ans=0,count=0;
9 cin>>n;
10 for(i=0;i<n;i++){
11 cin>>temp;
12 m[temp]++;
13 }
14 for(map<int,int>::iterator it=m.begin();it!=m.end();it++){
15 if(it->second>count){
16 count=it->second;
17 ans=it->first;
18 }
19 }
20 cout<<ans<<endl;
21 return 0;
22 }