admin 管理员组文章数量: 893697
thinkDifferent思维糖果
thinkDifferent思维糖果
- 求n个数是否满足给定的平均数、最大值、最小值
- 有多少个ordinary number
- Most Unstable Array
- 对整数n删除多少位能让25整除n
- 冒泡排序最糟糕情况 n*(n-1)/2
- Trouble Sort
- 已知多边形各顶点坐标,求该多边形的面积
求n个数是否满足给定的平均数、最大值、最小值
小蜗蜗有 n 个数字(实数),但他不知道这些数字具体是啥。他只知道这 n 个数字的最大值、最小值和平均值,但也不一定是对的。现在,小蜗蜗想知道,存不存在一种方案,使得这 n 个数字的最大值、最小值和平均值恰好等于给定值。
#include <bits/stdc++.h>
using namespace std;
int main(){int t;cin>>t;int n,maxx,minx,ave;while(t--){//cin>>n>>maxx>>minx>>ave;
// if(maxx<minx||ave<minx||ave>maxx){
// printf("no\n");
// continue;
// }
// if(n==1){
// if(maxx==minx&&maxx==ave)printf("yes\n");
// else printf("no\n");
// }
// else if(n==2){
// if((maxx+minx)/2==ave)printf("yes\n");
// else printf("no\n");
// }
// else{
// if(n*ave-minx-maxx>=minx*(n-2)&&n*ave-minx-maxx<=maxx*(n-2))printf("yes\n");
// else printf("no\n");
// }int min=(n-1)*minx+maxx;int max=(n-1)*maxx+minx;if(maxx<minx||ave<minx||ave>maxx){printf("no\n");continue;}if(n*ave>=min&&n*ave<=max){printf("yes\n");}else printf("no\n");}return 0;
}
有多少个ordinary number
#include <bits/stdc++.h>
using namespace std;
int main(){int t;cin>>t;int n;while(t--){cin>>n;int cnt=0;int x1;int b=0;//n有多少位 9*(b-1)int flag=1;int x=n%10;int k=n;while(n){
// if(n%10<=x)x=n%10;//1234 8849 9876 6789 6798
// else flag=0;//不一定要6543,只要每一位不小于最高位就行 if(n/10==0)x1=n%10;//最高位 n/=10;b++;}while(k){if(n%10<x1)falg=0;//1234 8849 9876 6789 6798}cnt+=9*(b-1);if(flag)cnt+=x1;else cnt+=(x1-1);cout<<cnt<<endl;}return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;while(t--){int n,w=-1,cs=1;cin>>n;int n1=n;while(n1){w++;n1/=10;if(w){cs*=10;cs++;//这种方法是除以1111(n有多少位除以多少位) }}printf("%d\n",w*9+n/cs);}
}
来了来了,不仅超时中途还陷入了死循环的错误,哭哭哭~
#include <bits/stdc++.h>
using namespace std;
int main(){int t;cin>>t;int n;while(t--){cin>>n;int cnt=0;for(int i=1;i<=n;i++){
// if(i/10==0)cnt++;
// while((i/10)!=0){//88 89 100 12 11
// cout<<"niew "<<i;
// int x=(i/10)%10;
// if(i%10==x)i=i/10;
// else {
// break;
// }
// }int k=i;int x=k%10;while(k!=0){//6if(k%10==x) {k=k/10;}else break;}if(k==0)cnt++;}cout<<cnt<<endl;}return 0;
}
Most Unstable Array
题意:构造一个序列,让两两元素之差的绝对值之和最大。
思维水题:我们可以发现对于如果
当n = 1时,没有绝对值的差a n s = 0,
当n = 2的时候,我们只能化成0 , n 的形式,a n s = n,
当n ≥ 3 时,最大值就是2 ∗ n 了,因为可以化成 0 , n ,
0, n, 0 , n ,0…的形式
#include <bits/stdc++.h>
using namespace std;
int main(){ int t;cin>>t;int n,sum;while(t--){cin>>n>>sum;if(n==1)printf("0\n");else if(n==2)printf("%d\n",sum);else{printf("%d\n",2*sum);}}
}
这题要求数列中每个数都是non—negative integer非负整数
就有点像之前一道题,要构造一个序列,使得这个序列累加之和为sum。,序列之中的数满足是整数就行,结果就是,sum,sum-1,-(sum-1) ,sum-2,-(sum-1)……1,-1,0
对整数n删除多少位能让25整除n
#include <bits/stdc++.h>
using namespace std;
int main(){int t;cin>>t;int n;while(t--){cin>>n;int cnt=0;//可以先判断if(n%25==0)噢,省下一些时间,当然不提前判断也许行 int flag0=0;//找到了最后两位中的那个0,还要找个0或者5 int flag5=0;//找到了最后两位中的那个5,还要找个2或者7while(n){
// int x=n%10;
// if(x==0&&!flag0)flag0=1;
// else if(x==5&&!flag5)flag5=1;
// else if(x==0||x==5&&flag0)break;
// else if(x==2||x==7&&flag5)break;
// else{
// cnt++;
// }
// n/=10;
//这种对于每个数字起初态度都是留下的做法不可以,比如50555,留下了最后一个5,走着走着
//就会让你悔不当初,还是狠一点,一开始就否掉它,走到成立的那一步再捞回来 cnt++;int x=n%10;
// if(x==0&&!flag0)flag0=1;
// else if(x==5&&!flag5)flag5=1;
//榆木脑袋怎么可以放在前面呢,flag标志一设,那么单单一个0或2、5、7就过关了呀 if((x==0||x==5)&&flag0){
//!!!||和 && 优先级可不像你想的那样相同 然后按照先后顺序判断,会先判断&&噢 !!! cnt-=2;//捞回这两个可以放在末尾的数 break;}else if((x==2||x==7)&&flag5){cnt-=2; break;}if(x==0&&!flag0)flag0=1;else if(x==5&&!flag5)flag5=1;n/=10;}cout<<cnt<<endl;}return 0;
}
冒泡排序最糟糕情况 n*(n-1)/2
Attention!Be sensitive!
Cubes Sorting
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long int ll;
ll a[N];
int main(){int t;scanf("%d",&t);int n;while(t--){int cnt=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",a+i);}
// for(int j=n-1;j>=0;j--){
// for(int i=0;i<j;i++){
// if(a[i]>a[i+1]){
// cnt++;
// swap(a[i],a[i+1]);
// }
// }
//}
//真正具体实现冒泡排序,双重循环碰上e5必定超时,此时考虑最坏情况,
//该序列完全倒序,那么冒牌排序需要交换n*(n-1)/2次(要对这个值敏感一点 !
//那么只需要看是否完全倒序,只要不是完全倒序,交换次数就会小于n*(n-1)/2
int sum=0;for(int i=0;i<n-1;i++){if(a[i]>a[i+1])sum++;//sum最终等于n-1那么说明完全倒序 }
if(sum==n-1)printf("NO\n");
else printf("YES\n");} return 0;
}
Trouble Sort
#include <bits/stdc++.h>
using namespace std;
const int N=1001;
//int a[N][2];
struct kkk{int a,b;
}c[N];
//bool cmp(kkk c1,kkk c2){
// return c1.a<c2.a;
//}
//bool is_sorted()这种简单的方法还是不要指望库函数啦,自己写一个很快哒a[i]<a[i+1],flag
//kkk c1[N];
int main(){int t;cin>>t;int n;while(t--){cin>>n;for(int i=0;i<n;i++){cin>>c[i].a;}for(int i=0;i<n;i++){cin>>c[i].b;}
// for(int j=n-1;j>=0;j--){
// for(int i=0;i<j;i++){
// if(c[i].a>c[i+1].a&&c[i].b!=c[i+1].b){
// swap(c[i],c[i+1]);
// }
// }
//}
//不管是cubeSort还是TroubleSort,这种思维题都不是冲着让你排序去的,所以不用
//那么老实地去实现
//思维在此:两个元素b不同才能进行交换。
//情况一:数组元素的b全部相同,那原序列无序就NO,有序则Yes
//情况二: 数组元素的b有的为0,有的为1,那么任意两元素必然可以实现交换呀
//即便b值相同,可以把与他俩b值不相同的第三个元素作为中介temp对他俩进行交换 int flag=1;//检测到有无序的就置为0int p=0,q=0;//分别记录0和1 是否出现过 for(int i=0;i<n-1;i++){ //10 20 20 30if(c[i].a>c[i+1].a){//最后non-decreasing 升序 flag=0; }if(c[i].b)q=1;//1出现过啦 if(c[i].b==0)p=1;//0出现过啦 }//Attention! 注意下标啦,不要忽略 n-1if(c[n-1].b)q=1;//1出现过啦 if(c[n-1].b==0)p=1;//0出现过啦 if(flag)printf("Yes\n");else if(p&&q)printf("Yes\n");else printf("No\n");
}return 0;
}
已知多边形各顶点坐标,求该多边形的面积
本文标签: thinkDifferent思维糖果
版权声明:本文标题:thinkDifferent思维糖果 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687605662h120293.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论