输入格式:
第一行一个整数K,表明有多少例子
接着K行,每行5个整数,保证互不相同。
输出格式:
每个例子输出没有比较的元素对(用下标表示,小的在前),每个元素对占一行。元素对按字典序输出,输出结束再输出一个空行
参考学习:
#include <stdio.h>
int main() {
int K;
scanf("%d", &K);
while (K--) {
int a[6], i, j;
for (i = 1; i <= 5; i++) {
scanf("%d", &a[i]);
}
for (i = 1; i <= 4; i++) {
for (j = i + 1; j <= 5; j++) {
if (a[i] < a[j]) {
printf("%d %d\n", i - 1, j - 1);
} else {
printf("%d %d\n", j - 1, i - 1);
}
}
}
printf("\n");
}
return 0;
}
首先读入整数K表示有K个测试样例。
然后每组数据读入5个整数,存储在数组a中。
接着使用双重循环枚举所有的元素对,如果第一个元素比第二个元素小,就输出它们的下标;否则交换它们的下标再输出。
最后输出一个空行表示当前测试结束。
public class 出现k次 {
public static void main(String[] args) {
int[] arr={2,2,2,9,7,7,7,3,3,3,6,6,6,0,0,0};
int len = arr.length;
char[][] KRadix = new char[len][]; //字符二维数组存取每一个数的三进制的每一位
int k =3;
//记录转成k进制数的最长位数,用来看最后需要计算多少列
int maxLen = 0;
//转成k进制数字
//对于每个数字
for(int i = 0;i<len;i++)
{
//求每个数字的三进制字符串并反转,然后转为字符数组 目的的将每个k进制数的低位对齐(因为转成k进制数的位数不同)
KRadix[i] = new StringBuilder(Integer.toString(arr[i], k)).reverse().toString().toCharArray();
if(KRadix[i].length > maxLen)
{
maxLen = KRadix[i].length;
}
}
//存放做完不进位加法每一位和
int[] resArr=new int[maxLen];
//做不进位加法
for(int i = 0;i<len;i++)
{
//不进位加法
for(int j = 0;j<maxLen;j++)
{
//如果j大于等于当前数组长度的话,就需要补0
if(j >=KRadix[i].length)
{
resArr[j]+=0;
}else
{
resArr[j] += (KRadix[i][j]-'0');
}
}
}
int res = 0;
for(int i = 0;i<maxLen;i++)
{
res+=(resArr[i]%k)*(int)(Math.pow(k, i));
}
System.out.println(res);
}
}