10 条题解
-
2
#include<stdio.h>//笨蛋思维? int main(){ int n,a,i; scanf("%d",&n); while(n--){ int m,t=0; scanf("%d",&a); for(i=1;i<=a;i++){ t+=i;//来确定这个数在哪一行 m=i;//m代表第几行 if(t>=a){ break;
} } if(m%20){//分奇数偶数行 if(ta){ printf("%d/1\n",m); } else{printf("%d/%d\n",a-t+m,t-a+1);}//比较抽象,想了很久。具体看题目给的图,找找规律 } else{ if(ta){ printf("1/%d\n",m);} else{printf("%d/%d\n",t-a+1,a-t+m);}//看清楚ta这种情况,这个比较容易漏。
} }
//就结束了?
return 0; }
-
1
#include<stdio.h>
int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int sum = 0, ans = 1; int m=n; for (int k = 1; k <= 100000; k++) { if (sum+k < n) { sum += k; ans=k+1; m=m-k; } } if(ans%2==0){ printf("%d/%d\n",m,ans-m+1); } else{ printf("%d/%d\n",ans-m+1,m); } } return 0; }
-
1
#include <stdio.h>
int main()
{
int m;
scanf("%d",&m);
while(m--){
int N;
scanf("%d",&N);
int ha=1,le=1;
int n=1;
int m=0;
while(1){
m+=n;
if(n%2==1){
int q=m;
for(int i=1;i<=n;i++){
le=n-i+1;
ha=i;
if(q==N){
m=q;
break;
}
q--;
}
}else{
int q=m;
for(int i=1;i<=n;i++){
ha=n-i+1;
le=i;
if(q==N){
m=q;
break;
}
q--;
}
}
n++;
if(m==N){
break;
}
}
printf("%d/%d\n",ha,le);
}
return 0;
}
-
1
int m, n,bz,i,j,w; int main(void) { scanf("%d", &m); while (m--) { bz = 1; w = 0; scanf("%d",&n); for ( i = 1; n>0 ;i++){ n = n - i; bz++; } bz--; if (n < 0) { w = n + i - 1; } else if (n == 0) { w = i-1; } //printf("%d %d", bz, w); if (bz % 2 == 0) { printf("%d/%d\n", w, (bz + 1 - w)); } else { printf("%d/%d\n", (bz + 1 - w), w); } } }
-
0
#include<stdio.h> int main() { int m,n; scanf("%d",&m); while(m--) { scanf("%d",&n); int i=n; int j=1; while(i>j) { i=i-j; j++; } if(j%20) { printf("%d/%d\n",i,j-i+1); } if(j%21) { printf("%d/%d\n",j-i+1,i); } } }
1 11
3 12 21
6 31 22 13
10 14 23 32 41
15 51 42 33 24 15
21 16 25 34 43 52 61
28 71 62 53 4435 26 17
36 18 27 3645 54 63 72 81
45 91 82 73 64 55 46 37 28 19
列举:第一列写的是到本行为止有多少个数(每行都从左开始数)
可以观察到每行个数+1, 所以输入的数只需要递减遍历,当i=i-j < j,即该数在第j行; 再观察奇偶的区别输出即可。
-
0
#include <stdio.h>
int main() { int m, N, n, num, den, k; scanf("%d", &m); // 读取测试数据组数 for (int i = 0; i < m; i++) { scanf("%d", &N); // 读取每组的N值 // 计算分数的位置 n = 1; // 行数 k = 0; // 当前编号的索引 while (1) { // 当前对角线的元素数量 k += n; if (k >= N) { // 找到对应的行和列 int position = N - (k - n); // 位置在当前对角线 if (n % 2 == 0) { // 偶数行,分母递增,分子递减 num = position; den = n + 1 - position; } else { // 奇数行,分子递增,分母递减 num = n + 1 - position; den = position; } break; } n++; // 移动到下一行 } // 输出结果 printf("%d/%d\n", num, den); } }
-
0
#include <stdio.h> int main() { int m; scanf("%d",&m); while(m--) { int n,t,a,b; scanf("%d",&n); int i=1; while(i*(i+1)<2n) { i++;//如果该项大于所编码的数量 } //此时的i表示该项所在的位数 i--;//为了求t i--后的 (ii+1)/2表示该项次数前面编码的数量 t=n-(i*(i+1)/2);//t表示第n项在第i次中站的位置的位数 if((i+1)%2==0) { a=t; b=(i+1)-(t-1); } else { a=(i+1)-(t-1); b=t; } printf("%d/%d\n",a,b);
} return 0;
}
-
0
还是有点意思的找规律问题
#include<iostream> using namespace std; int main() { int m; cin >> m; while(m--) { int m; cin >> m; int sum = 0,num = 0,k = 0; for(int i = 1 ; i < 1000 ; i++) { sum += i; num += i-1; if(m >= num&&m <= sum) { k = i; break; } } int cnt = m - num; int fm,fz; if(k % 2 == 1) { for(int i = k , j = 1 ; ; i-- , j++) { if(j == cnt) { fz = i; fm = j; break; } } } else if(k % 2 == 0) { for(int i = 1 ,j = k ; ; i++ , j--) { if(i == cnt) { fz = i; fm = j; break; } } } cout << fz << "/" << fm << endl; } return 0; }
-
0
将这些数分成几行(斜着 如1行只有 1 1 2行有 1 2 和 2 1)然后计算出在第几行,最后分成奇偶情况 讨论,很容易就能找出规律 ```#include<stdio.h> int main() { int m; scanf("%d",&m); while(m--) { int n; scanf("%d",&n); int sum=0; int d1=1; int i; while(sum<n) { for(i=1;i<=d1;i++) { sum++; if(sum==n) break; } if(sum<n) { d1++; } } if(d1%2==0) printf("%d/%d\n",i,d1-i+1); else printf("%d/%d\n",d1-i+1,i); } } `````` ````````` ```````````` ``````````````` `````````````````` ````````````````````` ```````````````````````` ``````````````````````````` `````````````````````````````` `````````````````````````````````
-
0
题目难度为2的题?
#include<stdio.h> int number1[1000]; int main() { int n,m,j,k,t; int i=1,sum=0; while(1) { sum=sum+i; number1[i]=sum; i++; if(sum>100000) break; } scanf("%d",&m); while(m--) { scanf("%d",&n); for(j=1;j<i;j++) { if(n<=number1[j]) { t=j; break; } } if(t%2!=0) { if((number1[j]-n)==(n-number1[j-1]-1)) printf("%d/%d\n",(t+1)/2,(t+1)/2); if((number1[j]-n)<(n-number1[j-1]-1)) { int z=t-(number1[j]-n); int y=number1[j]-n+1; printf("%d/%d\n",y,z); } if((number1[j]-n)>(n-number1[j-1]-1)) { int z=t-(number1[j]-n); int y=number1[j]-n+1; printf("%d/%d\n",y,z); } } if(t%2==0) { if((number1[j]-n)<(n-number1[j-1]-1)) { int z=t-(number1[j]-n); int y=number1[j]-n+1; printf("%d/%d\n",z,y); } if((number1[j]-n)>(n-number1[j-1]-1)) { int z=t-(number1[j]-n); int y=number1[j]-n+1; printf("%d/%d\n",z,y); } } } return 0; }
- 1
信息
- ID
- 155
- 时间
- 3000ms
- 内存
- 128MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 361
- 已通过
- 191
- 上传者