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 }